summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gorse <mgorse@suse.com>2023-05-17 16:18:51 -0500
committerMike Gorse <mgorse@suse.com>2023-05-17 16:23:24 -0500
commitc293ada84fde9a750506ad7033659280f974cb68 (patch)
tree014181fef890addc83c5a60324f498213adce31c
parentada254318a0a35e6f9ae3c080963353ead2a8966 (diff)
downloadat-spi2-core-gnome-44.tar.gz
Hold a reference to the AtspiDevice while processing eventsgnome-44
If this is not done, then the device might be finalized from under us during a callback, leading to a crash.
-rw-r--r--atspi/atspi-device-legacy.c2
-rw-r--r--atspi/atspi-device-x11.c3
2 files changed, 5 insertions, 0 deletions
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;
}