[Xcb] [PATCH 1/2 v2] xcb_disconnect(): Fix leak with error connections
Julien Cristau
jcristau at debian.org
Wed Feb 26 03:43:12 PST 2014
On Wed, Feb 19, 2014 at 21:33:11 +0100, Uli Schlachter wrote:
> There are two kind of error connections in XCB. First, if something goes wrong
> while the connection is being set up, _xcb_conn_ret_error() is used to return a
> static connection in an error state. If something goes wrong later,
> _xcb_conn_shutdown() is used to set c->has_error.
>
> This is important, because the static object that _xcb_conn_ret_error() returns
> must not be freed, while the dynamically allocated objects that go through
> _xcb_conn_shutdown() must obviously be properly deallocated.
>
> This used to work correctly, but in 769acff0da8, xcb_disconnect() was made to
> ignore all connections in an error state completely. Fix this by only ignoring
> the few static error connections that we have.
>
> This was tested with the following hack:
>
> xcb_connection_t *c = xcb_connect(NULL, NULL);
> close(xcb_get_file_descriptor(c));
> xcb_discard_reply(c, xcb_get_input_focus(c).sequence);
> xcb_flush(c);
> xcb_disconnect(c);
>
> Valgrind confirms that xcb has a memory leak before this patch that this patch
> indeed fixes.
>
> Signed-off-by: Uli Schlachter <psychon at znc.in>
> ---
> src/xcb_conn.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
On Wed, Feb 19, 2014 at 21:34:04 +0100, Uli Schlachter wrote:
> Code can be simplified if the deallocation functions can always be called in
> cleanup code. So if you have some code that does several things that can go
> wrong, one of which is xcb_connect(), after this change, the xcb_connection_t*
> variable can be initialized to NULL and xcb_disconnect() can always be called on
> the connection object.
>
> References: http://lists.freedesktop.org/archives/xcb/2013-September/008659.html
>
> Signed-off-by: Uli Schlachter <psychon at znc.in>
> ---
> src/xcb.h | 2 +-
> src/xcb_conn.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
For the series:
Reviewed-by: Julien Cristau <jcristau at debian.org>
Cheers,
Julien
More information about the Xcb
mailing list