From 6e07416bc4a3538b336b4c7a907215141f286530 Mon Sep 17 00:00:00 2001 From: Aaron Plattner Date: Sun, 15 Aug 2010 19:07:42 -0700 Subject: [PATCH] xcb_disconnect: call shutdown() to force a disconnect Fixes the X Test Suite's XCloseDisplay-6 test, which has this (admittedly ridiculous) behavior: 1. Create a window w. 2. Open two display connections, dpy1, and dpy2. 3. Grab the server using dpy1. 4. Fork. 5 (child). XSetProperty on w using dpy2. 5 (parent). Verify that no event was recieved on dpy1. 6 (parent). XCloseDisplay(dpy1). 6 (child). Verify that an event was received on dpy2. It was failing because at step 6 (child), the server had not actually ungrabbed yet because the file descriptor for dpy1 was still open in the child process. Shutting down the socket during XCloseDisplay matches the behavior of non-XCB Xlib, which calls shutdown() from _X11TransSocketDisconnect. Thanks to Julien Cristau for noticing this. Signed-off-by: Aaron Plattner --- src/xcb_conn.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/xcb_conn.c b/src/xcb_conn.c index 04e0430..73945c5 100644 --- a/src/xcb_conn.c +++ b/src/xcb_conn.c @@ -247,6 +247,9 @@ void xcb_disconnect(xcb_connection_t *c) return; free(c->setup); + + /* disallow further sends and receives */ + shutdown(c->fd, 2); close(c->fd); pthread_mutex_destroy(&c->iolock); -- 1.7.0.4