+ return 1;
+}
+
+/* Public interface */
+
+void *XCBWaitForReply(XCBConnection *c, unsigned int request, XCBGenericError **e)
+{
+ void *ret = 0;
+ if(e)
+ *e = 0;
+
+ pthread_mutex_lock(&c->iolock);
+
+ /* If this request has not been written yet, write it. */
+ if(_xcb_out_flush_to(c, request))
+ {
+ pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+ reader_list reader;
+ reader_list **prev_reader;
+
+ for(prev_reader = &c->in.readers; *prev_reader && (*prev_reader)->request <= request; prev_reader = &(*prev_reader)->next)
+ if((*prev_reader)->request == request)
+ goto done; /* error */
+
+ reader.request = request;
+ reader.data = &cond;
+ reader.next = *prev_reader;
+ *prev_reader = &reader;
+
+ while(!poll_for_reply(c, request, &ret, e))
+ if(!_xcb_conn_wait(c, &cond, 0, 0))
+ break;
+