diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2008-04-10 14:56:12 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2008-04-11 15:39:10 +0100 |
commit | a2608cdde54dd677290da83cc9f8b98b139ff774 (patch) | |
tree | 8b959f5ae8a50156cbb619c3b12e34e7af889789 /src/cairo-xlib-screen.c | |
parent | dc714106e156cb7901e376c0935922446ae9bcdf (diff) | |
download | cairo-a2608cdde54dd677290da83cc9f8b98b139ff774.tar.gz |
[xlib] Convert the Visual cache to use the screen mutex.
Use the per-screen mutex, introduced for the GC cache, to lock access to
the Visual cache (instead of the per-display mutex).
Diffstat (limited to 'src/cairo-xlib-screen.c')
-rw-r--r-- | src/cairo-xlib-screen.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/cairo-xlib-screen.c b/src/cairo-xlib-screen.c index fc07fda22..73d8bb76b 100644 --- a/src/cairo-xlib-screen.c +++ b/src/cairo-xlib-screen.c @@ -286,17 +286,17 @@ _cairo_xlib_screen_info_destroy (cairo_xlib_screen_info_t *info) break; } } - 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_MUTEX_UNLOCK (info->display->mutex); _cairo_xlib_screen_info_close_display (info); - _cairo_xlib_display_destroy (info->display); - + 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_MUTEX_FINI (info->mutex); free (info); @@ -438,11 +438,12 @@ _cairo_xlib_screen_get_visual_info (cairo_xlib_screen_info_t *info, Visual *visual, cairo_xlib_visual_info_t **out) { + Display *dpy = info->display->display; cairo_xlib_visual_info_t **visuals, *ret = NULL; cairo_status_t status; int i, n_visuals; - CAIRO_MUTEX_LOCK (info->display->mutex); + CAIRO_MUTEX_LOCK (info->mutex); visuals = _cairo_array_index (&info->visuals, 0); n_visuals = _cairo_array_num_elements (&info->visuals); for (i = 0; i < n_visuals; i++) { @@ -451,28 +452,28 @@ _cairo_xlib_screen_get_visual_info (cairo_xlib_screen_info_t *info, break; } } - CAIRO_MUTEX_UNLOCK (info->display->mutex); + CAIRO_MUTEX_UNLOCK (info->mutex); if (ret != NULL) { *out = ret; return CAIRO_STATUS_SUCCESS; } - status = _cairo_xlib_visual_info_create (info->display->display, + status = _cairo_xlib_visual_info_create (dpy, XScreenNumberOfScreen (info->screen), visual->visualid, &ret); if (status) return status; - CAIRO_MUTEX_LOCK (info->display->mutex); + CAIRO_MUTEX_LOCK (info->mutex); if (n_visuals != _cairo_array_num_elements (&info->visuals)) { /* check that another thread has not added our visual */ int new_visuals = _cairo_array_num_elements (&info->visuals); visuals = _cairo_array_index (&info->visuals, 0); for (i = n_visuals; i < new_visuals; i++) { if (visuals[i]->visualid == visual->visualid) { - _cairo_xlib_visual_info_destroy (info->display->display, ret); + _cairo_xlib_visual_info_destroy (dpy, ret); ret = visuals[i]; break; } @@ -481,10 +482,10 @@ _cairo_xlib_screen_get_visual_info (cairo_xlib_screen_info_t *info, status = _cairo_array_append (&info->visuals, &ret); } else status = _cairo_array_append (&info->visuals, &ret); - CAIRO_MUTEX_UNLOCK (info->display->mutex); + CAIRO_MUTEX_UNLOCK (info->mutex); if (status) { - _cairo_xlib_visual_info_destroy (info->display->display, ret); + _cairo_xlib_visual_info_destroy (dpy, ret); return status; } |