On Wed, Mar 19, 2014 at 06:29:01PM +0100, Michal Privoznik wrote: > Currently, we use pthread_sigmask(SIG_BLOCK, ...) prior to calling > poll(). This is okay, as we don't want poll() to be interrupted. > However, then - immediately as we fall out from the poll() - we try to > restore the original sigmask - again using SIG_BLOCK. But as the man > page says, SIG_BLOCK adds signals to the signal mask: > > SIG_BLOCK > The set of blocked signals is the union of the current set and the set argument. > > Therefore, when restoring the original mask, we need to completely > overwrite the one we set earlier and hence we should be using: > > SIG_SETMASK > The set of blocked signals is set to the argument set. > > Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> > --- > > Notes: > This is a very old bug. It's worth backporting onto all maint branches we have. > > src/rpc/virnetclient.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c > index b288b74..255997b 100644 > --- a/src/rpc/virnetclient.c > +++ b/src/rpc/virnetclient.c > @@ -792,7 +792,7 @@ int virNetClientSetTLSSession(virNetClientPtr client, > if (ret < 0 && (errno == EAGAIN || errno == EINTR)) > goto repoll; > > - ignore_value(pthread_sigmask(SIG_BLOCK, &oldmask, NULL)); > + ignore_value(pthread_sigmask(SIG_SETMASK, &oldmask, NULL)); > } > > ret = virNetTLSContextCheckCertificate(tls, client->tls); > @@ -816,7 +816,7 @@ int virNetClientSetTLSSession(virNetClientPtr client, > if (ret < 0 && (errno == EAGAIN || errno == EINTR)) > goto repoll2; > > - ignore_value(pthread_sigmask(SIG_BLOCK, &oldmask, NULL)); > + ignore_value(pthread_sigmask(SIG_SETMASK, &oldmask, NULL)); > > len = virNetTLSSessionRead(client->tls, buf, 1); > if (len < 0 && errno != ENOMSG) { ACK, I see other places in our code get this right already Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list