From 37e7d3c77c5175aed382c498bffb876ea0c8581b Mon Sep 17 00:00:00 2001 From: Mike Gorse Date: Wed, 17 May 2023 16:18:51 -0500 Subject: Hold a reference to the AtspiDevice while processing events If this is not done, then the device might be finalized from under us during a callback, leading to a crash. --- atspi/atspi-device-legacy.c | 2 ++ atspi/atspi-device-x11.c | 3 +++ 2 files changed, 5 insertions(+) (limited to 'atspi') diff --git a/atspi/atspi-device-legacy.c b/atspi/atspi-device-legacy.c index d440483a..84cc2a29 100644 --- a/atspi/atspi-device-legacy.c +++ b/atspi/atspi-device-legacy.c @@ -90,6 +90,7 @@ key_cb (AtspiDeviceEvent *event, void *user_data) gboolean ret = priv->keyboard_grabbed; guint modifiers; + g_object_ref (legacy_device); set_virtual_modifier (legacy_device, event->hw_code, event->type == (AtspiEventType) ATSPI_KEY_PRESS); @@ -104,6 +105,7 @@ key_cb (AtspiDeviceEvent *event, void *user_data) event->event_string); g_boxed_free (ATSPI_TYPE_DEVICE_EVENT, event); + g_object_unref (legacy_device); return ret; } diff --git a/atspi/atspi-device-x11.c b/atspi/atspi-device-x11.c index 16fb1636..1c0bee89 100644 --- a/atspi/atspi-device-x11.c +++ b/atspi/atspi-device-x11.c @@ -330,6 +330,7 @@ do_event_dispatch (gpointer user_data) XComposeStatus status; guint modifiers; + g_object_ref (device); while (XPending (display)) { XNextEvent (display, &xevent); @@ -392,6 +393,8 @@ do_event_dispatch (gpointer user_data) continue; } } + + g_object_unref (device); return TRUE; } -- cgit v1.2.1