diff options
author | Simon McVittie <smcv@debian.org> | 2019-09-06 12:03:17 +0100 |
---|---|---|
committer | Simon McVittie <smcv@debian.org> | 2020-03-10 16:33:57 +0000 |
commit | ed0d2913236ef8a020748db8f9169050123e6594 (patch) | |
tree | 5c34c9c362932699de65c48a27cf43ad16b389e2 | |
parent | 1ddbbf0c0969e4b35a4a5e86a031bfec80990187 (diff) | |
download | cogl-ed0d2913236ef8a020748db8f9169050123e6594.tar.gz |
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>
-rw-r--r-- | cogl/cogl-xlib-renderer.c | 5 |
1 files changed, 4 insertions, 1 deletions
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); } |