Re: [Evolution-hackers] Something screwy when Evolution Shell invokes bonobo_activation_active_server_unregister()
- From: Jeffrey Stedfast <fejj novell com>
- To: Tor Lillqvist <tml novell com>
- Cc: evolution-hackers gnome org, michael meeks novell com
- Subject: Re: [Evolution-hackers] Something screwy when Evolution Shell invokes bonobo_activation_active_server_unregister()
- Date: Mon, 19 Jun 2006 09:48:36 -0400
Is there a ::destroy() method on the EShell object (like GtkWidgets)?
Perhaps it would be better to unregister there rather than in an idle
cb? My concern is that in the idle cb, there may still be a race? Even
if not, tho, I feel it would be cleaner to unregister in a ::destroy()
if that's a possibility.
Jeff
On Sat, 2006-06-17 at 02:23 +0300, Tor Lillqvist wrote:
> 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
>
>
> _______________________________________________
> Evolution-hackers mailing list
> Evolution-hackers gnome org
> http://mail.gnome.org/mailman/listinfo/evolution-hackers
--
Jeffrey Stedfast
Evolution Hacker - Novell, Inc.
fejj novell com - www.novell.com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]