[Evolution-hackers] Something screwy when Evolution Shell invokes bonobo_activation_active_server_unregister()



I am debugging why Evo on Windows doesn't manage to reuse the
evolution-data-server process that is left running when you quit
Evolution. One possible hint to the cause is that when you quit
Evolution on Windows, for some reason it seems that it doesn't manage to
unregister the EShell from the bonobo-activation-server. (If one checks
with bonobo-browse, it still says that the Shell is Active.)

Debugging the code where Evolution tries to unregister turns up some
interesting stuff. It's the impl_finalize() in evolution/shell/e-shell.c
that calls bonobo_activation_active_server_unregister(). However, at
that stage the BonoboObject::corba_objref field of the BonoboObject
(EShell) object is already NULL.

This is obvious, because if one checks the backtrace from
impl_finalize(), what causes it do be called is the call to
g_object_unref() in bonobo_object_finalize_internal_T()
(libbonobo/bonobo/bonobo-object.c). And that function has a few lines
earlier called bonobo_object_corba_deactivate_T(), which sets
corba_objref to NULL.

Anyway, this means the second parameter to
bonobo_activation_active_server_unregister() is NULL, which is then
passed on as third parameter to Bonobo_ObjectDirectory_unregister().
This NULL eventually ends up as the object parameter to
remove_active_server() in
libbonobo/activation-server/object-directory-corba.c in the
bonobo-activation-server process, and it obviously doesn't match the
registered EShell server, so no removal happens.

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?

Apparently, unregistration still works on Unix, though, as if you run
bonobo-browse after quitting Evolution on Unix, there indeed is no Shell
listed as Active. Maybe the bonobo-activation-server notices that the
socket connection hangs up and then automatically unregisters, or
something? Hmmm. 

Oh well, why this other mechanism then doesn't work on Windows needs to
be debugged now...

--tml





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]