From 887d43578c3acc7d45c8b2e3ade5da29be804eeb Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 23 Apr 2010 20:14:03 +0100 Subject: [PATCH] xlib: Simply release the ref, not destroy, from CloseDisplay. Do not call the destroy function directly, but rely on the reference counting to call the notifier upon the last reference. Instead, simply release the reference we were holding for the cache and CloseDisplay callback. --- src/cairo-xlib-display.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/cairo-xlib-display.c b/src/cairo-xlib-display.c index be65c2276..b0a582808 100644 --- a/src/cairo-xlib-display.c +++ b/src/cairo-xlib-display.c @@ -205,15 +205,15 @@ _cairo_xlib_close_display (Display *dpy, XExtCodes *codes) XSync (dpy, False); old_handler = XSetErrorHandler (_noop_error_handler); - if (cairo_device_acquire (&display->base)) - return 0; - _cairo_xlib_display_notify (display); - _cairo_xlib_call_close_display_hooks (display); - _cairo_xlib_display_discard_screens (display); + if (cairo_device_acquire (&display->base)) { + _cairo_xlib_display_notify (display); + _cairo_xlib_call_close_display_hooks (display); + _cairo_xlib_display_discard_screens (display); - /* catch any that arrived before marking the display as closed */ - _cairo_xlib_display_notify (display); - cairo_device_release (&display->base); + /* catch any that arrived before marking the display as closed */ + _cairo_xlib_display_notify (display); + cairo_device_release (&display->base); + } XSync (dpy, False); XSetErrorHandler (old_handler); @@ -234,7 +234,9 @@ _cairo_xlib_close_display (Display *dpy, XExtCodes *codes) CAIRO_MUTEX_UNLOCK (_cairo_xlib_display_mutex); assert (display != NULL); - _cairo_xlib_display_destroy (display); + + cairo_device_finish (&display->base); + cairo_device_destroy (&display->base); /* Return value in accordance with requirements of * XESetCloseDisplay */