- if(!count)
- return 1;
-
- memmove(vector + 1, vector, count++ * sizeof(struct iovec));
- vector[0].iov_base = c->out.queue;
- vector[0].iov_len = c->out.queue_len;
- c->out.queue_len = 0;
-
- assert(!c->out.vec_len);
- assert(!c->out.vec);
- c->out.vec_len = count;
- c->out.vec = vector;
- return _xcb_out_flush(c);
-}
-
-int _xcb_out_flush(XCBConnection *c)
-{
- int ret = 1;
- while(ret && (c->out.queue_len || c->out.vec_len))
- ret = _xcb_conn_wait(c, /*should_write*/ 1, &c->out.cond);
- c->out.request_written = c->out.request;
- pthread_cond_broadcast(&c->out.cond);
- return ret;
+ while(c->out.writing)
+ pthread_cond_wait(&c->out.cond, &c->iolock);
+ assert(c->out.request_written >= request);
+ return 1;