summaryrefslogtreecommitdiff
path: root/src/cairo-xlib-screen.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2008-04-10 14:58:30 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2008-04-11 15:39:10 +0100
commit68f53282b9a7ebf1bb2117b5a630237f458b99b0 (patch)
tree1beb71a7f448255cf4d573f18e786185a28ffdc0 /src/cairo-xlib-screen.c
parenta2608cdde54dd677290da83cc9f8b98b139ff774 (diff)
downloadcairo-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.c16
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);