diff options
author | Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> | 2013-12-13 22:10:55 +0200 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2013-12-16 17:23:01 -0800 |
commit | e1e2352dcc157fd0bd7c880379ba42b9e5d9be75 (patch) | |
tree | 144c33698e338cafb598102ca410a76b99fc0c71 | |
parent | 010d0b169589ca5af5bb38fa1dba09a8885cc405 (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.c | 5 | ||||
-rw-r--r-- | src/compositor.h | 1 |
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; |