Re: Something screwy when Evolution Shell invokes bonobo_activation_active_server_unregister()

Tor Lillqvist <[email protected]>
Newsgroups gmane.comp.gnome.evolution.devel
Message-ID <1150500230.5356.7.camel__10060.1640101106$1150539379$gmane$org@pettson>
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  <[email protected]>

	* 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


_______________________________________________
Evolution-hackers mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/evolution-hackers
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.