diff options
author | Jamey Sharp <jamey@minilop.net> | 2006-03-03 11:08:10 -0800 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2006-03-03 11:08:10 -0800 |
commit | 29f9fe0fc805a1ec6860f167a45664cc1cf0c769 (patch) | |
tree | 1355f5342b580c93ecabd08cbfb9823ab594fd83 /src/xcb_out.c | |
parent | 255c21b17f61147388bab6e1d42623a008a4a8d2 (diff) |
API/ABI change: XCBSendRequest returns the sequence number instead of using an out-parameter. Now 0 is a special sequence number indicating failure.
Diffstat (limited to 'src/xcb_out.c')
-rw-r--r-- | src/xcb_out.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/xcb_out.c b/src/xcb_out.c index b201565..367013a 100644 --- a/src/xcb_out.c +++ b/src/xcb_out.c @@ -69,15 +69,14 @@ CARD32 XCBGetMaximumRequestLength(XCBConnection *c) return c->out.maximum_request_length; } -int XCBSendRequest(XCBConnection *c, unsigned int *request, int flags, struct iovec *vector, const XCBProtocolRequest *req) +unsigned int XCBSendRequest(XCBConnection *c, int flags, struct iovec *vector, const XCBProtocolRequest *req) { - int ret; + unsigned int request; CARD32 prefix[2]; int veclen = req->count; enum workarounds workaround = WORKAROUND_NONE; assert(c != 0); - assert(request != 0); assert(vector != 0); assert(req->count > 0); @@ -92,8 +91,8 @@ int XCBSendRequest(XCBConnection *c, unsigned int *request, int flags, struct io if(req->ext) { const XCBQueryExtensionRep *extension = XCBGetExtensionData(c, req->ext); - /* TODO: better error handling here, please! */ - assert(extension && extension->present); + if(!(extension && extension->present)) + return 0; ((CARD8 *) vector[0].iov_base)[0] = extension->major_opcode; ((CARD8 *) vector[0].iov_base)[1] = req->opcode; } @@ -148,20 +147,22 @@ int XCBSendRequest(XCBConnection *c, unsigned int *request, int flags, struct io if(req->isvoid && !force_sequence_wrap(c)) { pthread_mutex_unlock(&c->iolock); - return -1; + return 0; } /* wait for other writing threads to get out of my way. */ while(c->out.writing) pthread_cond_wait(&c->out.cond, &c->iolock); - *request = ++c->out.request; + request = ++c->out.request; + assert(request != 0); - _xcb_in_expect_reply(c, *request, workaround, flags); + _xcb_in_expect_reply(c, request, workaround, flags); - ret = _xcb_out_write_block(c, vector, veclen); + if(!_xcb_out_write_block(c, vector, veclen)) + request = 0; pthread_mutex_unlock(&c->iolock); - return ret; + return request; } int XCBFlush(XCBConnection *c) |