+
+ if(c->in.request_read != lastread)
+ {
+ if(c->in.current_reply)
+ {
+ _xcb_map_put(c->in.replies, lastread, c->in.current_reply);
+ c->in.current_reply = 0;
+ c->in.current_reply_tail = &c->in.current_reply;
+ }
+ c->in.request_completed = c->in.request_read - 1;
+ }
+ if(genrep.response_type != 1) /* not reply: error or event */
+ c->in.request_completed = c->in.request_read; /* XXX: does event/error imply no more replies? */
+
+ while(c->in.pending_replies && c->in.pending_replies->request <= c->in.request_completed)
+ {
+ pending_reply *oldpend = c->in.pending_replies;
+ c->in.pending_replies = oldpend->next;
+ if(!oldpend->next)
+ c->in.pending_replies_tail = &c->in.pending_replies;
+ free(oldpend);
+ }
+ }
+
+ if(genrep.response_type == 0 || genrep.response_type == 1)
+ {
+ pend = c->in.pending_replies;
+ if(pend && pend->request != c->in.request_read)
+ pend = 0;