summaryrefslogtreecommitdiff
path: root/src/cairo-xlib-screen.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2008-04-10 14:56:12 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2008-04-11 15:39:10 +0100
commita2608cdde54dd677290da83cc9f8b98b139ff774 (patch)
tree8b959f5ae8a50156cbb619c3b12e34e7af889789 /src/cairo-xlib-screen.c
parentdc714106e156cb7901e376c0935922446ae9bcdf (diff)
downloadcairo-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.c25
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;
}