Re: [Evolution-hackers] Something screwy when Evolution Shell invokes bonobo_activation_active_server_unregister()
- From: Tor Lillqvist <tml novell com>
- To: michael meeks novell com
- Cc: evolution-hackers gnome org
- Subject: Re: [Evolution-hackers] Something screwy when Evolution Shell invokes bonobo_activation_active_server_unregister()
- Date: Sat, 17 Jun 2006 02:23:50 +0300
lö 2006-06-17 klockan 01:40 +0300 skrev Tor Lillqvist:
> If my analysis is correct, this means that attempting to do a CORBA
> object unregistration in the GObject finalize method is too late, isn't
> it?
I tested by applying this simple patch to e-shell.c, moving the
bonobo_activation_active_server_unregister() call from impl_finalize()
to notify_no_windows_left_idle_cb():
Index: shell/e-shell.c
===================================================================
RCS file: /cvs/gnome/evolution/shell/e-shell.c,v
retrieving revision 1.272
diff -p -u -r1.272 e-shell.c
--- shell/e-shell.c 30 Jan 2006 11:49:53 -0000 1.272
+++ shell/e-shell.c 16 Jun 2006 23:17:50 -0000
@@ -360,13 +360,18 @@ static gboolean
notify_no_windows_left_idle_cb (void *data)
{
EShell *shell;
+ EShellPrivate *priv;
shell = E_SHELL (data);
+ priv = shell->priv;
set_interactive (shell, FALSE);
g_signal_emit (shell, signals [NO_WINDOWS_LEFT], 0);
+ if (priv->iid != NULL)
+ bonobo_activation_active_server_unregister (priv->iid,
+ bonobo_object_corba_objref (BONOBO_OBJECT (shell)));
bonobo_object_unref (BONOBO_OBJECT (shell));
return FALSE;
@@ -467,10 +472,6 @@ impl_finalize (GObject *object)
shell = E_SHELL (object);
priv = shell->priv;
-
- if (priv->iid != NULL)
- bonobo_activation_active_server_unregister (priv->iid,
- bonobo_object_corba_objref (BONOBO_OBJECT (shell)));
e_free_string_list (priv->crash_type_names);
And lo and behold, it works! Now the ESHell gets unregistered, and when
starting Evolution again it manages to register its EShell and contact
the already running e-d-s etc.
OK to apply this patch to HEAD and stable? ChangeLog entry:
2006-06-17 Tor Lillqvist <tml novell com>
* e-shell.c (impl_finalize): Don't call
bonobo_activation_active_server_unregister() here, it's too late,
the EShell Bonobo object has already been deactivated and its
associated CORBA object is NULL.
(notify_no_windows_left_idle_cb): Instead, call
bonobo_activation_active_server_unregister() here, when the EShell
Bonobo object is still fully active.
I should still of course also investigate why the other (unknown)
mechanism which causes unregistration to happen anyway on Unix doesn't
work on Windows...
--tml
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]