Re: Something screwy when Evolution Shell invokes bonobo_activation_active_server_unregister()

Harish Krishnaswamy <[email protected]>
Newsgroups gmane.comp.gnome.evolution.devel
Message-ID <1150727688.5948.6.camel__22738.272304605$1150741517$gmane$org@sunshine>
Tor,

 Please commit the patch to HEAD as well as the stable branch. The
change looks fine to me. I will also get the  unregister action tested
in the regular builds on the branches and perhaps in MacOS (I do not
know if it matters, but anyway!) as a routine but I do not expect any
surprises.


Thanks,
Harish



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  <[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

_______________________________________________
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.