diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2008-04-10 14:58:30 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2008-04-11 15:39:10 +0100 |
commit | 68f53282b9a7ebf1bb2117b5a630237f458b99b0 (patch) | |
tree | 1beb71a7f448255cf4d573f18e786185a28ffdc0 /src/cairo-xlib-screen.c | |
parent | a2608cdde54dd677290da83cc9f8b98b139ff774 (diff) | |
download | cairo-68f53282b9a7ebf1bb2117b5a630237f458b99b0.tar.gz |
[xlib] Clear the Visual cache upon display closure.
Clear the Visual cache, similarly to flushing the GC cache, upon
XCloseDisplay.
Diffstat (limited to 'src/cairo-xlib-screen.c')
-rw-r--r-- | src/cairo-xlib-screen.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/cairo-xlib-screen.c b/src/cairo-xlib-screen.c index 73d8bb76b..c456b1657 100644 --- a/src/cairo-xlib-screen.c +++ b/src/cairo-xlib-screen.c @@ -254,6 +254,7 @@ _cairo_xlib_screen_info_reference (cairo_xlib_screen_info_t *info) void _cairo_xlib_screen_info_close_display (cairo_xlib_screen_info_t *info) { + cairo_xlib_visual_info_t **visuals; int i; CAIRO_MUTEX_LOCK (info->mutex); @@ -263,6 +264,12 @@ _cairo_xlib_screen_info_close_display (cairo_xlib_screen_info_t *info) info->gc[i] = NULL; } } + + visuals = _cairo_array_index (&info->visuals, 0); + for (i = 0; i < _cairo_array_num_elements (&info->visuals); i++) + _cairo_xlib_visual_info_destroy (info->display->display, visuals[i]); + _cairo_array_truncate (&info->visuals, 0); + CAIRO_MUTEX_UNLOCK (info->mutex); } @@ -271,8 +278,6 @@ _cairo_xlib_screen_info_destroy (cairo_xlib_screen_info_t *info) { cairo_xlib_screen_info_t **prev; cairo_xlib_screen_info_t *list; - cairo_xlib_visual_info_t **visuals; - int i; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&info->ref_count)); @@ -290,13 +295,10 @@ _cairo_xlib_screen_info_destroy (cairo_xlib_screen_info_t *info) _cairo_xlib_screen_info_close_display (info); - visuals = _cairo_array_index (&info->visuals, 0); - for (i = 0; i < _cairo_array_num_elements (&info->visuals); i++) - _cairo_xlib_visual_info_destroy (info->display->display, visuals[i]); - _cairo_array_fini (&info->visuals); - _cairo_xlib_display_destroy (info->display); + _cairo_array_fini (&info->visuals); + CAIRO_MUTEX_FINI (info->mutex); free (info); |