- static const char pad[3];
- int i;
- int len = 0;
-
- for(i = 0; i < count; ++i)
- len += XCB_CEIL(vector[i].iov_len);
-
- /* Is the queue about to overflow? */
- if(c->out.queue_len + len < sizeof(c->out.queue))
- {
- /* No, this will fit. */
- for(i = 0; i < count; ++i)
- {
- memcpy(c->out.queue + c->out.queue_len, vector[i].iov_base, vector[i].iov_len);
- if(vector[i].iov_len & 3)
- memset(c->out.queue + c->out.queue_len + vector[i].iov_len, 0, XCB_PAD(vector[i].iov_len));
- c->out.queue_len += XCB_CEIL(vector[i].iov_len);
- }
- return len;
- }
+ 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;
+}