X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_out.c;h=1094cebf15925728e8f5a5422a2c4514cbe48c42;hb=baff35a04b0e8d21821850a405a550d86a8aeb6f;hp=60226e58162aca1d0b2a6385fadae71d8461915e;hpb=baae5826a6f51490e842be931c8b9f76086c4d98;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_out.c b/src/xcb_out.c index 60226e5..1094ceb 100644 --- a/src/xcb_out.c +++ b/src/xcb_out.c @@ -111,8 +111,8 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect uint16_t len; } fields; uint32_t packet; - } sync = { { /* GetInputFocus */ 43, 0, 1 } }; - unsigned int request; + } sync_req = { { /* GetInputFocus */ 43, 0, 1 } }; + uint64_t request; uint32_t prefix[3] = { 0 }; int veclen = req->count; enum workarounds workaround = WORKAROUND_NONE; @@ -127,7 +127,7 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect if(!(flags & XCB_REQUEST_RAW)) { static const char pad[3]; - int i; + unsigned int i; uint16_t shortlen = 0; size_t longlen = 0; assert(vector[0].iov_len >= 4); @@ -187,22 +187,22 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect workaround = WORKAROUND_GLX_GET_FB_CONFIGS_BUG; /* get a sequence number and arrange for delivery. */ - _xcb_lock_io(c); + pthread_mutex_lock(&c->iolock); /* wait for other writing threads to get out of my way. */ while(c->out.writing) - _xcb_wait_io(c, &c->out.cond); + pthread_cond_wait(&c->out.cond, &c->iolock); request = ++c->out.request; - /* send GetInputFocus (sync) when 64k-2 requests have been sent without + /* send GetInputFocus (sync_req) when 64k-2 requests have been sent without * a reply. - * Also send sync (could use NoOp) at 32-bit wrap to avoid having + * Also send sync_req (could use NoOp) at 32-bit wrap to avoid having * applications see sequence 0 as that is used to indicate * an error in sending the request */ while((req->isvoid && c->out.request == c->in.request_expected + (1 << 16) - 1) || request == 0) { - prefix[0] = sync.packet; + prefix[0] = sync_req.packet; _xcb_in_expect_reply(c, request, WORKAROUND_NONE, XCB_REQUEST_DISCARD_REPLY); c->in.request_expected = c->out.request; request = ++c->out.request; @@ -231,7 +231,7 @@ unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect _xcb_conn_shutdown(c); request = 0; } - _xcb_unlock_io(c); + pthread_mutex_unlock(&c->iolock); return request; } @@ -240,9 +240,9 @@ int xcb_flush(xcb_connection_t *c) int ret; if(c->has_error) return 0; - _xcb_lock_io(c); + pthread_mutex_lock(&c->iolock); ret = _xcb_out_flush_to(c, c->out.request); - _xcb_unlock_io(c); + pthread_mutex_unlock(&c->iolock); return ret; } @@ -282,7 +282,7 @@ int _xcb_out_send(xcb_connection_t *c, struct iovec **vector, int *count) return ret; } -int _xcb_out_flush_to(xcb_connection_t *c, unsigned int request) +int _xcb_out_flush_to(xcb_connection_t *c, uint64_t request) { assert(XCB_SEQUENCE_COMPARE(request, <=, c->out.request)); if(XCB_SEQUENCE_COMPARE(c->out.request_written, >=, request)) @@ -297,7 +297,7 @@ int _xcb_out_flush_to(xcb_connection_t *c, unsigned int request) return _xcb_out_send(c, &vec_ptr, &count); } while(c->out.writing) - _xcb_wait_io(c, &c->out.cond); + pthread_cond_wait(&c->out.cond, &c->iolock); assert(XCB_SEQUENCE_COMPARE(c->out.request_written, >=, request)); return 1; }