Re: broken pipe



On Thu, 13 Jun 2002 gtk-perl-list andrew pimlott net wrote:

The problem is not the fork, per se.  The problem is the exit(3).
It is a common problem with forking:  Both processes think they
should clean up when they exit.  In your case, gtk (or maybe it is
xlib or gdk?) calls shutdown(2) on the connection to X when the
child exits, so the connection is broken when the parent tries to
use it.  You can see this clearly with strace (on Linux).

In general, you should make sure that objects are only destroyed by
one of the forks.

One solution, as you know, is to make sure gtk is initialized only
in one process, by forking before initializing.  Another is to
prevent clean-up routines from running in the child by calling
_exit(2), aka POSIX::_exit.

gtk probably should have a way to tell it not to clean up in the
current process.  That would be the ideal solution, because other
clean-ups (eg, for objects initialized in the child) could still
run.

Thanks for the quick response.  I added a call to POSIX::_exit(0) in the
child and the Broken Pipe error went away.

-- 
~'`^`'~=-.,__,.-=~'`^`'~=-.,__,.-=~'`^`'~=-., \|/  (___)  \|/ _,.-=~'`^`
                          Brian Medley         @~./'O o`\.~@
"Knowledge is Power" brian medley verizon net /__( \___/ )__\  *PPPFFBT!*
  -- Francis Bacon                               `\__`U_/'
 _,.-=~'`^`'~=-.,__,.-=~'`^`'~=-.,__,.-=~'`^`'~= <____|'  ^^`'~=-.,__,.-=
~`'^`'~=-.,__,.-=~'`^`'~=-.,__,.-=~'`^`'~=-.,__,.-==--^'~=-.,__,.-=~'`^`




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