summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>2013-12-13 22:10:55 +0200
committerKristian Høgsberg <krh@bitplanet.net>2013-12-16 17:23:01 -0800
commite1e2352dcc157fd0bd7c880379ba42b9e5d9be75 (patch)
tree144c33698e338cafb598102ca410a76b99fc0c71
parent010d0b169589ca5af5bb38fa1dba09a8885cc405 (diff)
compositor: Don't repaint outputs being destroyed
Set a flag when an output is being destroyed and use that to avoid repainting. This allows functions that schedule an output repaint to be called when the output is being destroyed without causing the compositor to crash.
-rw-r--r--src/compositor.c5
-rw-r--r--src/compositor.h1
2 files changed, 6 insertions, 0 deletions
diff --git a/src/compositor.c b/src/compositor.c
index e4eb56dc..ed6548c6 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1759,6 +1759,9 @@ weston_output_repaint(struct weston_output *output, uint32_t msecs)
pixman_region32_t output_damage;
int r;
+ if (output->destroying)
+ return 0;
+
/* Rebuild the surface list and update surface transforms up front. */
weston_compositor_build_view_list(ec);
@@ -3105,6 +3108,8 @@ weston_compositor_remove_output(struct weston_compositor *compositor,
WL_EXPORT void
weston_output_destroy(struct weston_output *output)
{
+ output->destroying = 1;
+
weston_compositor_remove_output(output->compositor, output);
wl_list_remove(&output->link);
diff --git a/src/compositor.h b/src/compositor.h
index 84b0f79f..901366fb 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -198,6 +198,7 @@ struct weston_output {
int move_x, move_y;
uint32_t frame_time;
int disable_planes;
+ int destroying;
char *make, *model, *serial_number;
uint32_t subpixel;