summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Matos <tiagomatos@gmail.com>2015-04-02 18:57:16 +0200
committerRui Matos <tiagomatos@gmail.com>2015-04-02 23:21:22 +0200
commit4aa74af6947121023a52445966b20a0e3ad7953c (patch)
tree385cc9fce98f16717ffb828a24e4f93947ca642b
parentf3fecd478d5693a6381a3ab7912173c2bca85dbb (diff)
downloadmutter-4aa74af6947121023a52445966b20a0e3ad7953c.tar.gz
wayland-keyboard: Disconnect from backend signals on release
Otherwise we'll access freed memory in the handlers. The wayland keyboard is released when the seat loses the keyboard capability which happens when leaving the VT so if there are keymap changes while switched away from the VT we would crash. https://bugzilla.gnome.org/show_bug.cgi?id=747263
-rw-r--r--src/wayland/meta-wayland-keyboard.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/wayland/meta-wayland-keyboard.c b/src/wayland/meta-wayland-keyboard.c
index a62b4f354..e4d4f2212 100644
--- a/src/wayland/meta-wayland-keyboard.c
+++ b/src/wayland/meta-wayland-keyboard.c
@@ -411,6 +411,11 @@ meta_wayland_xkb_info_destroy (MetaWaylandXkbInfo *xkb_info)
void
meta_wayland_keyboard_release (MetaWaylandKeyboard *keyboard)
{
+ MetaBackend *backend = meta_get_backend ();
+
+ g_signal_handlers_disconnect_by_func (backend, on_keymap_changed, keyboard);
+ g_signal_handlers_disconnect_by_func (backend, on_keymap_layout_group_changed, keyboard);
+
meta_wayland_keyboard_set_focus (keyboard, NULL);
meta_wayland_xkb_info_destroy (&keyboard->xkb_info);