[mutter/gnome-3-26] wayland/surface: Disconnect actor handlers before unassigning role
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gnome-3-26] wayland/surface: Disconnect actor handlers before unassigning role
- Date: Fri, 27 Oct 2017 11:06:24 +0000 (UTC)
commit 81341ec9a9ab92cdc2d5d009f9f730128e25cf94
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Oct 27 18:32:21 2017 +0800
wayland/surface: Disconnect actor handlers before unassigning role
The handlers depend on a role being assigned. Destroying the window
causes it to become unmapped, which would sometimes trigger one of the
handlers, resulting in an is-assigned assert hitting in one of the
handlers. Avoid this by disconnecting the handlers earlier, so that
there is no risk that any them being triggered before the role is
assigned.
https://bugzilla.gnome.org/show_bug.cgi?id=789552
src/wayland/meta-wayland-surface.c | 19 ++++++++++---------
1 files changed, 10 insertions(+), 9 deletions(-)
---
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index 7dded19..bea809d 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -1324,6 +1324,16 @@ wl_surface_destructor (struct wl_resource *resource)
g_signal_emit (surface, surface_signals[SURFACE_DESTROY], 0);
+ g_signal_handlers_disconnect_by_func (surface->surface_actor,
+ surface_actor_mapped_notify,
+ surface);
+ g_signal_handlers_disconnect_by_func (surface->surface_actor,
+ surface_actor_allocation_notify,
+ surface);
+ g_signal_handlers_disconnect_by_func (surface->surface_actor,
+ surface_actor_position_notify,
+ surface);
+
g_clear_object (&surface->role);
/* If we still have a window at the time of destruction, that means that
@@ -1349,15 +1359,6 @@ wl_surface_destructor (struct wl_resource *resource)
if (surface->input_region)
cairo_region_destroy (surface->input_region);
- g_signal_handlers_disconnect_by_func (surface->surface_actor,
- surface_actor_mapped_notify,
- surface);
- g_signal_handlers_disconnect_by_func (surface->surface_actor,
- surface_actor_allocation_notify,
- surface);
- g_signal_handlers_disconnect_by_func (surface->surface_actor,
- surface_actor_position_notify,
- surface);
g_object_unref (surface->surface_actor);
meta_wayland_compositor_destroy_frame_callbacks (compositor, surface);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]