summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Agner <stefan@agner.ch>2019-06-20 10:55:14 +0200
committerSimon Ser <contact@emersion.fr>2019-08-16 07:51:20 +0000
commit64e2964159a138007ed11868f1060c75373a36f0 (patch)
treecc353b4aa027a9231239759fa7cfb765ffeede6d
parent2b2c9a6f7f81cf218c579c846c63098f28cd8088 (diff)
downloadweston-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.c21
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 *