diff options
author | Stefan Agner <stefan@agner.ch> | 2019-06-20 10:55:14 +0200 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-08-16 07:51:20 +0000 |
commit | 64e2964159a138007ed11868f1060c75373a36f0 (patch) | |
tree | cc353b4aa027a9231239759fa7cfb765ffeede6d | |
parent | 2b2c9a6f7f81cf218c579c846c63098f28cd8088 (diff) | |
download | weston-64e2964159a138007ed11868f1060c75373a36f0.tar.gz |
screen-share: fix error handling
Make sure damage region gets properly unreferenced in error cases.
Signed-off-by: Stefan Agner <stefan@agner.ch>
-rw-r--r-- | compositor/screen-share.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/compositor/screen-share.c b/compositor/screen-share.c index 070d3938..31020467 100644 --- a/compositor/screen-share.c +++ b/compositor/screen-share.c @@ -852,19 +852,15 @@ shared_output_repainted(struct wl_listener *listener, void *data) pixman_image_create_bits(PIXMAN_a8r8g8b8, width, height, NULL, stride); - if (!so->cache_image) { - shared_output_destroy(so); - return; - } + if (!so->cache_image) + goto err_pixman_init; pixman_region32_fini(&damage); pixman_region32_init_rect(&damage, 0, 0, width, height); } - if (shared_output_ensure_tmp_data(so, &damage) < 0) { - shared_output_destroy(so); - return; - } + if (shared_output_ensure_tmp_data(so, &damage) < 0) + goto err_pixman_init; do_yflip = !!(so->output->compositor->capabilities & WESTON_CAP_CAPTURE_YFLIP); @@ -894,11 +890,16 @@ shared_output_repainted(struct wl_listener *listener, void *data) } } - pixman_region32_fini(&damage); - so->cache_dirty = 1; + pixman_region32_fini(&damage); shared_output_update(so); + + return; + +err_pixman_init: + pixman_region32_fini(&damage); + shared_output_destroy(so); } static struct shared_output * |