Re: My ORBit2 Win32 problem today

Michael Meeks <[email protected]>
Newsgroups gmane.comp.gnome.evolution.windows.devel,gmane.comp.gnome.evolution.devel
Organization Novell, Inc.
Message-ID <[email protected]>
Hi Tor,

On Wed, 2006-06-21 at 02:35 +0300, Tor Lillqvist wrote:
> I spent much time today debugging a problem related to
> evolution-exchange. When quitting Evolution, and then after a while
> starting it again, it hang. bonobo-activation-server was waiting for a
> reply from evolution-exchange-storage.exe (which had been staying around
> even after Evolution quit).

	Ah - good ;-) glad it was nothing to do with some threading problem in
the ORB.

> Well, the root cause why it didn't go away was the atexit() call in
> ORBit2's CORBA_ORB_init(). (Well, g_atexit(), but that is just a #define
> for atexit() in Win32.)

	So - as the comment says, this is primarily for cleaning up stale
sockets in /tmp/orbit-$USER on Unix - which (since we don't use
anonymous sockets) can't be cleaned up any other way, and otherwise tend
to build up into a mountain of stale sockets [ incidentally run
linc-cleanup-sockets on a Unix box to see how many apps pathalogically
failed in recent history without that cleanup ;-)

michael@t60p:/data/home/michael> linc-cleanup-sockets
Cleaned 379 files 24 still live

	[ but I do a lot of ctrl-c exiting ;-) ]

> So, I simply ifdeffed out the atexit() usage on Windows... Just let the
> process die

	Sounds reasonable; of course: ultimately if we didn't create any UNIX
sockets we don't badly need this atexit thing to clean them up :-) so
life is good. There is however another interesting problem that the
g_atexit [ might ] solve: which is that sockets can behave quite
strangely: eg. a remote app can close a socket / exit and the client may
not (remote machine only?) get notification that the socket is shut/dead
until it tries to use it. b-a-s eg. is lifecycle managed by noticing
when it's clients die, and when they all go - it goes too; of course,
potentially if the ORB is shutdown cleanly it can send
'close-connection' messages on all it's connections 1st [ I hope /
imagine it does this, although the shutdown semantics are a little
unpolished pwrt. 'wait-for-completion' ]. Anyhow - *hopefully* the local
TCP sockets you're using will be helpful and wake a poll(HUP) [ or
whatever you use ] when a remote app exits, and there is no problem here
either - if so, we should prolly just commit that #ifdef to HEAD
ORBit2 :-)

> A safe way around this would be to explicitly flush and shut down CORBA
> and Bonobo before exiting main() in evolution-exchange/storage/main.c.
> Unfortunately I couldn't find any API to do that cleanly. Calling
> bonobo_debug_shutdown() (twice, as bonobo_init_full() apparently gets
> called twice and bonobo_debug_shutdown() needs to be called as many
> times to actually do anything...) causes a g_error() from
> bonobo_context_shutdown(): "In-proc object has no servant association
> this probably means you shutdown the ORB before you shutdown libbonobo".
> I wonder if that is a bogus error message?

	How odd. Of course, could be a bogus error message - please do chase
it.

> - There is no absolute need any longer to kill the processes that stay
> running when one quits Evolution, or to clean out state files.

	Great. I assume that when you log-out that the alarm daemon, gconfd-2
and b-a-s all get cleaned up by the O/S ?

	Anyhow - good work :-)

	Regards,

		Michael.

-- 
 [email protected]  <><, Pseudo Engineer, itinerant idiot
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.