- int n;
- assert(!c->out.queue_len);
- n = writev(c->fd, c->out.vec, c->out.vec_len);
- if(n < 0 && errno == EAGAIN)
- return 1;
- if(n <= 0)
- return 0;
-
- for(; c->out.vec_len; --c->out.vec_len, ++c->out.vec)
- {
- int cur = c->out.vec->iov_len;
- if(cur > n)
- cur = n;
- c->out.vec->iov_len -= cur;
- c->out.vec->iov_base = (char *) c->out.vec->iov_base + cur;
- n -= cur;
- if(c->out.vec->iov_len)
- break;
- }
- if(!c->out.vec_len)
- c->out.vec = 0;
- assert(n == 0);
- return 1;
+ int ret = 1;
+ while(ret && *count)
+ ret = _xcb_conn_wait(c, &c->out.cond, vector, count);
+ c->out.request_written = c->out.request;
+ pthread_cond_broadcast(&c->out.cond);
+ return ret;