[libvirt] Zombie process after open libvirt connection
Carlos Rodrigues
cmar at eurotux.com
Wed Mar 19 17:55:21 UTC 2014
Thank you Michal, this is good news for me.
I'll wait for this patch.
Regards,
--
Carlos Rodrigues
Engenheiro de Software Sénior
Eurotux Informática, S.A. | www.eurotux.com
(t) +351 253 680 300 (m) +351 911 926 110
On Qua, 2014-03-19 at 18:27 +0100, Michal Privoznik wrote:
> On 19.03.2014 12:10, Carlos Rodrigues wrote:
> > Hello Michal,
> >
> > I am using libvirt 1.1.3 and perl-Sys-Virt 1.1.3 and perl-5.16 on Fedora
> > 19 x86_64
> >
> > The zombie process appears after open libvirt connection with qemu-tls,
> > and perl module is binding for libvirt library XS.
> >
> > Here is my running example with zombie process:
> >
> > $ perl test-chldhandle-bug-fixed.pl & sleep 15 && echo && ps axf | grep perl && echo
> > [2] 12427
> > init... pid=12427
> > while...
> > fork 1
> > end... pid=12430
> > receive chld
> > fork 2
> > end... pid=12431
> > receive chld
> > 2014-03-19 11:06:38.712+0000: 12427: info : libvirt version: 1.1.3.1, package: 2.fc19 (Unknown, 2014-03-17-15:02:00, cmar-laptop.lan)
> > 2014-03-19 11:06:38.712+0000: 12427: warning : virNetTLSContextCheckCertificate:1140 : Certificate check failed Certificate [session] owner does not match the hostname 10.10.4.249
> > connection open
> > fork 3
> > end... pid=12432
> > fork 4
> > end... pid=12440
> >
> > 12427 pts/2 S 0:00 | \_ perl test-chldhandle-bug-fixed.pl
> > 12432 pts/2 Z 0:00 | | \_ [perl] <defunct>
> > 12440 pts/2 Z 0:00 | | \_ [perl] <defunct>
> > 12442 pts/2 S+ 0:00 | \_ grep --color=auto perl
>
> Aha! It seems like this is only present if using tls, I was unable to
> reproduce this with tcp or unix sockets. And when using tcp I can see
> SIGCHLD being delivered while with tls it is not. That makes me wonder
> if either libvirt or gnutls silently sets signal mask and not restore it
> back. Because if I take a look at signal mask I can clearly see SIGCHLD
> to be blocked (from /proc/$pid/status):
>
> SigPnd: 0000000000000000
> ShdPnd: 0000000000010000
> SigBlk: 0000000008011000
> SigIgn: 0000000000001080
> SigCgt: 0000000180010000
>
> What we can see here is, SigBlk (the bitmask of blocked signals)
> contains 0x801100 which is SIGPIPE, SIGCHLD and SIGWINCH. Right, why
> would libvirt care about SIGWINCH anyway? Git greping it leads us to
> virNetClientSetTLSSession(). I can clearly see there we are adding just
> those three signals to a mask. Then setting this mask just prior to
> calling poll() and then restoring back. Oh wait, we are not!
> pthread_sigmask(SIG_BLOCK,...) is just adding new signals to the mask,
> not overwriting the old one. So yes, this is clearly libvirt bug.
>
> If I use SIG_SETMASK there, I am no longer getting any zombies. I'll
> post the patch shortly.
>
> Michal
More information about the libvir-list
mailing list