On Tue, Aug 12, 2008 at 01:27:03PM +0100, Daniel P. Berrange wrote:
The process using libvirt can have setup arbitrary signal handlers.
In
the libvirtd case we have one attached to SIGCHILD, and the handler writes
to a pipe which is then processeed in the main loop. When you fork() signal
handlers are preserved in the child process, but you may well not want the
signal handlers to be run in the children - for example in LXC we closed
the FD associated the pipe after fork(), and that FD is now asociated
with a socket we use to talk to the container. So if the original signal
handler is run bad stuff will happen in the child.
Actually ignore this version of the patch for now - it mixes in some
code re-arrangement to fix some error reporting, but there's some more
troublesome error reporting problems still broken. So I'll do a patch
to fix error reporting first, and then re-post this.
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|