From: Jamey Sharp Date: Sat, 15 Mar 2008 03:18:52 +0000 (-0700) Subject: Use sequence number ranges in pending replies X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=96e55444b9b9500420f9132a1ace720100a26398;p=free-sw%2Fxcb%2Flibxcb Use sequence number ranges in pending replies This allows optimizing adjacent pending replies with the same flags, and will help support default flags for a range of future requests. Commit by Josh Triplett and Jamey Sharp. --- diff --git a/src/xcb_in.c b/src/xcb_in.c index a0e5e10..0c68208 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -52,7 +52,8 @@ struct reply_list { }; typedef struct pending_reply { - unsigned int request; + unsigned int first_request; + unsigned int last_request; enum workarounds workaround; int flags; struct pending_reply *next; @@ -112,7 +113,7 @@ static int read_packet(xcb_connection_t *c) } while(c->in.pending_replies && - XCB_SEQUENCE_COMPARE (c->in.pending_replies->request, <=, c->in.request_completed)) + XCB_SEQUENCE_COMPARE (c->in.pending_replies->last_request, <=, c->in.request_completed)) { pending_reply *oldpend = c->in.pending_replies; c->in.pending_replies = oldpend->next; @@ -128,7 +129,9 @@ static int read_packet(xcb_connection_t *c) if(genrep.response_type == XCB_ERROR || genrep.response_type == XCB_REPLY) { pend = c->in.pending_replies; - if(pend && pend->request != c->in.request_read) + if(pend && + (XCB_SEQUENCE_COMPARE(c->in.request_read, <, pend->first_request) || + XCB_SEQUENCE_COMPARE(c->in.request_read, >, pend->last_request))) pend = 0; } @@ -506,7 +509,7 @@ int _xcb_in_expect_reply(xcb_connection_t *c, unsigned int request, enum workaro _xcb_conn_shutdown(c); return 0; } - pend->request = request; + pend->first_request = pend->last_request = request; pend->workaround = workaround; pend->flags = flags; pend->next = 0;