diff options
author | Jamey Sharp <jamey@minilop.net> | 2006-03-03 01:45:00 -0800 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2006-03-03 01:45:00 -0800 |
commit | 255c21b17f61147388bab6e1d42623a008a4a8d2 (patch) | |
tree | 2c90eb7d82167262538147869a72ffc82523b37d | |
parent | 622b599c8fcf5d677f76ca03f3241a23dba58712 (diff) |
Add 32-bit full_sequence fields to generic errors and events, so callers can always correlate events and errors with requests correctly.
-rw-r--r-- | src/xcb.h | 4 | ||||
-rw-r--r-- | src/xcb_in.c | 5 |
2 files changed, 8 insertions, 1 deletions
@@ -80,12 +80,16 @@ typedef struct { BYTE response_type; CARD8 pad0; CARD16 sequence; + CARD32 pad[7]; + CARD32 full_sequence; } XCBGenericEvent; typedef struct { BYTE response_type; BYTE error_code; CARD16 sequence; + CARD32 pad[7]; + CARD32 full_sequence; } XCBGenericError; typedef struct { diff --git a/src/xcb_in.c b/src/xcb_in.c index cacb220..cf7dbe7 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -133,7 +133,7 @@ static int read_packet(XCBConnection *c) length += genrep.length * 4; } - buf = malloc(length); + buf = malloc(length + (genrep.response_type == 1 ? 0 : sizeof(CARD32))); if(!buf) return 0; if(_xcb_in_read_block(c, buf, length) <= 0) @@ -142,6 +142,9 @@ static int read_packet(XCBConnection *c) return 0; } + if(genrep.response_type != 1) + ((XCBGenericEvent *) buf)->full_sequence = c->in.request_read; + /* reply, or checked error */ if(genrep.response_type == 1 || (genrep.response_type == 0 && pend && (pend->flags & XCB_REQUEST_CHECKED))) { |