diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-08-17 23:17:43 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-08-17 23:20:01 +0100 |
commit | 4af7a1c8637f3008a2265e063ab990eec07e02dd (patch) | |
tree | 909e8ef9713c82f07a2afa6dc482f21782ab69ca /src/cairo-xlib-surface-shm.c | |
parent | 1a87c526bfb7c35f5f207ca4aca7cf50a3b96765 (diff) | |
download | cairo-4af7a1c8637f3008a2265e063ab990eec07e02dd.tar.gz |
xlib/shm: Propagate the last-request to the synchronous create
If we optimise away the pending frees we must be careful to propagate
the implied sync.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-xlib-surface-shm.c')
-rw-r--r-- | src/cairo-xlib-surface-shm.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/cairo-xlib-surface-shm.c b/src/cairo-xlib-surface-shm.c index 5c23c9b7f..7d9a3e1b3 100644 --- a/src/cairo-xlib-surface-shm.c +++ b/src/cairo-xlib-surface-shm.c @@ -328,7 +328,8 @@ _cairo_xlib_shm_info_cleanup (cairo_xlib_display_t *display) } static cairo_xlib_shm_info_t * -_cairo_xlib_shm_info_find (cairo_xlib_display_t *display, size_t size) +_cairo_xlib_shm_info_find (cairo_xlib_display_t *display, + size_t size, unsigned long *last_request) { cairo_xlib_shm_info_t *info; struct pqueue *pq = &display->shm->info; @@ -343,6 +344,7 @@ _cairo_xlib_shm_info_find (cairo_xlib_display_t *display, size_t size) if (info->size >= size && size <= 2*info->size) return info; + *last_request = info->last_request; _cairo_mempool_free (&info->pool->mem, info->mem); free (info); } while ((info = PQ_TOP(pq))); @@ -456,10 +458,11 @@ _cairo_xlib_shm_info_create (cairo_xlib_display_t *display, { cairo_xlib_shm_info_t *info; cairo_xlib_shm_t *pool; + unsigned long last_request = 0; void *mem = NULL; if (will_sync) { - info = _cairo_xlib_shm_info_find (display, size); + info = _cairo_xlib_shm_info_find (display, size, &last_request); if (info) return info; } @@ -483,7 +486,7 @@ _cairo_xlib_shm_info_create (cairo_xlib_display_t *display, info->pool = pool; info->mem = mem; info->size = size; - info->last_request = 0; + info->last_request = last_request; return info; } |