void xcb_prefetch_extension_data(xcb_connection_t *c, xcb_extension_t *ext)
{
    if(c->has_error)
        return;
    pthread_mutex_lock(&c->ext.lock);
    get_lazyreply(c, ext);
    pthread_mutex_unlock(&c->ext.lock);
}
/* Do not free the returned XCBQueryExtensionRep - on return, it's aliased
 * from the cache. */
const XCBQueryExtensionRep *XCBGetExtensionData(XCBConnection *c, XCBExtension *ext)
{
    lazyreply *data;

    pthread_mutex_lock(&c->ext.lock);
    data = get_lazyreply(c, ext);
    if(data && data->tag == LAZY_COOKIE)
    {
        data->tag = LAZY_FORCED;
        data->value.reply = XCBQueryExtensionReply(c, data->value.cookie, 0);
    }
    pthread_mutex_unlock(&c->ext.lock);

    return data ? data->value.reply : 0;
}
/* Do not free the returned xcb_query_extension_reply_t - on return, it's aliased
 * from the cache. */
const xcb_query_extension_reply_t *xcb_get_extension_data(xcb_connection_t *c, xcb_extension_t *ext)
{
    lazyreply *data;
    if(c->has_error)
        return 0;

    pthread_mutex_lock(&c->ext.lock);
    data = get_lazyreply(c, ext);
    if(data && data->tag == LAZY_COOKIE)
    {
        data->tag = LAZY_FORCED;
        data->value.reply = xcb_query_extension_reply(c, data->value.cookie, 0);
    }
    pthread_mutex_unlock(&c->ext.lock);

    return data ? data->value.reply : 0;
}
void XCBPrefetchExtensionData(XCBConnection *c, XCBExtension *ext)
{
    pthread_mutex_lock(&c->ext.lock);
    get_lazyreply(c, ext);
    pthread_mutex_unlock(&c->ext.lock);
}