[Xcb] [PATCH 2/2] Make xcb_disconnect(NULL) safe

Uli Schlachter psychon at znc.in
Tue Dec 31 06:57:26 PST 2013


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 | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/xcb.h b/src/xcb.h
index e62c985..34585c5 100644
--- a/src/xcb.h
+++ b/src/xcb.h
@@ -482,7 +482,7 @@ xcb_connection_t *xcb_connect_to_fd(int fd, xcb_auth_info_t *auth_info);
  * @param c: The connection.
  *
  * Closes the file descriptor and frees all memory associated with the
- * connection @c c.
+ * connection @c c. If @p c is @c NULL, nothing is done.
  */
 void xcb_disconnect(xcb_connection_t *c);
 
diff --git a/src/xcb_conn.c b/src/xcb_conn.c
index 9da11b0..5832e82 100644
--- a/src/xcb_conn.c
+++ b/src/xcb_conn.c
@@ -342,7 +342,8 @@ xcb_connection_t *xcb_connect_to_fd(int fd, xcb_auth_info_t *auth_info)
 
 void xcb_disconnect(xcb_connection_t *c)
 {
-    if(c == (xcb_connection_t *) &xcb_con_error ||
+    if(c == NULL ||
+            c == (xcb_connection_t *) &xcb_con_error ||
             c == (xcb_connection_t *) &xcb_con_closed_mem_er ||
             c == (xcb_connection_t *) &xcb_con_closed_parse_er ||
             c == (xcb_connection_t *) &xcb_con_closed_screen_er)
-- 
1.8.5.2



More information about the Xcb mailing list