summaryrefslogtreecommitdiff
path: root/src/pixman-renderer.c
diff options
context:
space:
mode:
authorNeil Roberts <neil@linux.intel.com>2013-11-13 15:44:06 +0000
committerKristian Høgsberg <krh@bitplanet.net>2013-11-13 16:32:58 -0800
commite505171a3254883aedb5f69ab8f090205ba88188 (patch)
tree7700ff6e036333ef8bd38708f361e96930fe62a4 /src/pixman-renderer.c
parentf707e8145ba8c26811c5dae2b3d00844afc0ffaf (diff)
downloadweston-e505171a3254883aedb5f69ab8f090205ba88188.tar.gz
Add calls to wl_shm_buffer_begin/end_access
This wraps all accesses to an SHM buffer between wl_shm_buffer_begin and end so that wayland-shm can install a handler for SIGBUS and catch attempts to pass the compositor a buffer that is too small.
Diffstat (limited to 'src/pixman-renderer.c')
-rw-r--r--src/pixman-renderer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c
index a80be5f5..b7198299 100644
--- a/src/pixman-renderer.c
+++ b/src/pixman-renderer.c
@@ -305,6 +305,9 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
else
pixman_image_set_filter(ps->image, PIXMAN_FILTER_NEAREST, NULL, 0);
+ if (ps->buffer_ref.buffer)
+ wl_shm_buffer_begin_access(ps->buffer_ref.buffer->shm_buffer);
+
pixman_image_composite32(pixman_op,
ps->image, /* src */
NULL /* mask */,
@@ -315,6 +318,9 @@ repaint_region(struct weston_view *ev, struct weston_output *output,
pixman_image_get_width (po->shadow_image), /* width */
pixman_image_get_height (po->shadow_image) /* height */);
+ if (ps->buffer_ref.buffer)
+ wl_shm_buffer_end_access(ps->buffer_ref.buffer->shm_buffer);
+
if (pr->repaint_debug)
pixman_image_composite32(PIXMAN_OP_OVER,
pr->debug_color, /* src */