From 96e55444b9b9500420f9132a1ace720100a26398 Mon Sep 17 00:00:00 2001 From: Jamey Sharp Date: Fri, 14 Mar 2008 20:18:52 -0700 Subject: [PATCH] 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. --- src/xcb_in.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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; -- 2.34.1