[cogl/wip/smcv/double-close] cogl-xlib-renderer: Ensure we don't close the same X display twice



commit ed0d2913236ef8a020748db8f9169050123e6594
Author: Simon McVittie <smcv debian org>
Date:   Fri Sep 6 12:03:17 2019 +0100

    cogl-xlib-renderer: Ensure we don't close the same X display twice
    
    If we don't do this, it results in a double-free that segfaults
    test_atlas_migration on ES2, when running an x86_64 build under Xvfb
    (probably other architectures and displays, I haven't checked).
    
    ==671783==ERROR: AddressSanitizer: SEGV on unknown address ...
    ==671783==The signal is caused by a READ memory access.
        #0 0x7fbc0b5a28e7 in xcb_disconnect (...)
        #1 0x7fbc0bfc2be8 in XCloseDisplay (...)
        #2 0x7fbc0d6b8910 in _cogl_xlib_renderer_disconnect .../cogl/cogl-xlib-renderer.c:573
        #3 0x7fbc0d6eba71 in _cogl_winsys_renderer_disconnect .../cogl/winsys/cogl-winsys-egl-x11.c:257
        #4 0x7fbc0d6ebd7e in _cogl_winsys_renderer_connect .../cogl/winsys/cogl-winsys-egl-x11.c:289
        #5 0x7fbc0d55e970 in cogl_renderer_connect .../cogl/cogl-renderer.c:687
        #6 0x7fbc0d557dff in cogl_context_new .../cogl/cogl-context.c:202
        #7 0x7fbc0d6fcce5 in test_utils_init .../test-fixtures/test-utils.c:176
        #8 0x557c76a1c7f5 in main .../tests/conform/test-conform-main.c:90
        #9 0x7fbc0c527bba in __libc_start_main ../csu/libc-start.c:308
        #10 0x557c76a1b209 in _start (...)
    
    Signed-off-by: Simon McVittie <smcv debian org>

 cogl/cogl-xlib-renderer.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
---
diff --git a/cogl/cogl-xlib-renderer.c b/cogl/cogl-xlib-renderer.c
index 8801c1cb..8a5d8d81 100644
--- a/cogl/cogl-xlib-renderer.c
+++ b/cogl/cogl-xlib-renderer.c
@@ -570,7 +570,10 @@ _cogl_xlib_renderer_disconnect (CoglRenderer *renderer)
   renderer->outputs = NULL;
 
   if (!renderer->foreign_xdpy && xlib_renderer->xdpy)
-    XCloseDisplay (xlib_renderer->xdpy);
+    {
+      XCloseDisplay (xlib_renderer->xdpy);
+      xlib_renderer->xdpy = NULL;
+    }
 
   unregister_xlib_renderer (renderer);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]