diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-04-23 20:14:03 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-04-23 20:15:44 +0100 |
commit | 887d43578c3acc7d45c8b2e3ade5da29be804eeb (patch) | |
tree | 7ad9b2a20c0654b9a671c03ee018f669abfd3c8d /src/cairo-xlib-display.c | |
parent | c63e3490a5fc2836837e7adcb5ecad62bdfd18ab (diff) | |
download | cairo-887d43578c3acc7d45c8b2e3ade5da29be804eeb.tar.gz |
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.
Diffstat (limited to 'src/cairo-xlib-display.c')
-rw-r--r-- | src/cairo-xlib-display.c | 22 |
1 files changed, 12 insertions, 10 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); - - /* catch any that arrived before marking the display as closed */ - _cairo_xlib_display_notify (display); - cairo_device_release (&display->base); + 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); + } 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 */ |