* atk-bridge/bridge.c:
(atk_bridge_init), (spi_atk_bridge_register_application),
(deregister_application), (spi_atk_bridge_focus_tracker),
(spi_atk_emit_eventv):
Bug #329454. Use atk_misc_threads_enter/atk_misc_threads_leave
to prevent deadlock.
git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@878
e2bd861d-eb25-0410-b326-
f6ed22b6b98c
+2007-01-19 Li Yuan <li.yuan@sun.com>
+
+ * atk-bridge/bridge.c:
+ (atk_bridge_init), (spi_atk_bridge_register_application),
+ (deregister_application), (spi_atk_bridge_focus_tracker),
+ (spi_atk_emit_eventv):
+ Bug #329454. Use atk_misc_threads_enter/atk_misc_threads_leave
+ to prevent deadlock.
+
2007-01-08 Li Yuan <li.yuan@sun.com>
* configure.in, NEWS: Uprev/release 1.7.15 for gnome 2.17.5.
2007-01-08 Li Yuan <li.yuan@sun.com>
* configure.in, NEWS: Uprev/release 1.7.15 for gnome 2.17.5.
static gboolean atk_listeners_registered = FALSE;
static gint toplevels = 0;
static gboolean exiting = FALSE;
static gboolean atk_listeners_registered = FALSE;
static gint toplevels = 0;
static gboolean exiting = FALSE;
+static AtkMisc *misc = NULL;
static guint atk_signal_text_changed;
static guint atk_signal_children_changed;
static guint atk_signal_text_changed;
static guint atk_signal_children_changed;
atk_bridge_initialized = TRUE;
atk_bridge_pid = getpid ();
atk_bridge_initialized = TRUE;
atk_bridge_pid = getpid ();
+ misc = atk_misc_get_instance();
+
if (g_getenv ("ATK_BRIDGE_REDIRECT_LOG"))
{
fname = g_strconcat ("/tmp/", g_get_prgname (), ".at-spi-log", NULL);
if (g_getenv ("ATK_BRIDGE_REDIRECT_LOG"))
{
fname = g_strconcat ("/tmp/", g_get_prgname (), ".at-spi-log", NULL);
static void
spi_atk_bridge_register_application (Accessibility_Registry registry)
{
static void
spi_atk_bridge_register_application (Accessibility_Registry registry)
{
+ atk_misc_threads_leave (misc);
Accessibility_Registry_registerApplication (spi_atk_bridge_get_registry (),
BONOBO_OBJREF (this_app),
&ev);
Accessibility_Registry_registerApplication (spi_atk_bridge_get_registry (),
BONOBO_OBJREF (this_app),
&ev);
+ atk_misc_threads_enter (misc);
if (ev._major != CORBA_NO_EXCEPTION)
CORBA_exception_free (&ev);
}
if (ev._major != CORBA_NO_EXCEPTION)
CORBA_exception_free (&ev);
}
static void
deregister_application (BonoboObject *app)
{
static void
deregister_application (BonoboObject *app)
{
- Accessibility_Registry registry = spi_atk_bridge_get_registry ();
+ Accessibility_Registry registry = spi_atk_bridge_get_registry ();
+ atk_misc_threads_leave (misc);
Accessibility_Registry_deregisterApplication (registry, BONOBO_OBJREF (app), &ev);
Accessibility_Registry_deregisterApplication (registry, BONOBO_OBJREF (app), &ev);
+ atk_misc_threads_enter (misc);
device_event_controller = bonobo_object_release_unref (device_event_controller, &ev);
registry = bonobo_object_release_unref (registry, &ev);
device_event_controller = bonobo_object_release_unref (device_event_controller, &ev);
registry = bonobo_object_release_unref (registry, &ev);
spi_atk_bridge_init_nil (&e.any_data, object);
if (BONOBO_EX (&ev))
registry_died = TRUE;
spi_atk_bridge_init_nil (&e.any_data, object);
if (BONOBO_EX (&ev))
registry_died = TRUE;
+ else {
+ atk_misc_threads_leave (misc);
Accessibility_Registry_notifyEvent (spi_atk_bridge_get_registry (),
&e, &ev);
Accessibility_Registry_notifyEvent (spi_atk_bridge_get_registry (),
&e, &ev);
+ atk_misc_threads_enter (misc);
+ }
if (BONOBO_EX (&ev))
registry_died = TRUE;
if (BONOBO_EX (&ev))
registry_died = TRUE;
registry = spi_atk_bridge_get_registry ();
if (!registry_died)
{
registry = spi_atk_bridge_get_registry ();
if (!registry_died)
{
+ atk_misc_threads_leave (misc);
Accessibility_Registry_notifyEvent (registry,
&e, &ev);
Accessibility_Registry_notifyEvent (registry,
&e, &ev);
+ atk_misc_threads_enter (misc);
#ifdef SPI_BRIDGE_DEBUG
if (ev._major != CORBA_NO_EXCEPTION)
g_message ("error emitting event %s, (%d) %s",
#ifdef SPI_BRIDGE_DEBUG
if (ev._major != CORBA_NO_EXCEPTION)
g_message ("error emitting event %s, (%d) %s",