[libvirt] [PATCH] Ignore SIGWINCH in remote client call to poll(2) (RHBZ#567931).

Paolo Bonzini pbonzini at redhat.com
Wed Feb 24 17:22:53 UTC 2010


On 02/24/2010 05:09 PM, Richard W.M. Jones wrote:
> In bug 567931 we found that virt-top would exit occasionally
> when the terminal window was resized.  Tracking this down it
> turned out that SIGWINCH was being delivered to the process at
> exactly the point where the libvirt remote driver was calling
> poll(2) waiting for a reply from libvirtd.
>
> This caused the poll(2) call to be interrupted (returning errno
> EINTR).  However handling EINTR the same way as EAGAIN was not
> the solution to this problem since we found previously that this
> would break Ctrl-C handling (commit 47fec8eac2bb3).
>
> The correct solution is to mask out SIGWINCH for the duration
> of the poll(2) system call.  The per-thread mask is changed and
> restored immediately after the call.  Since we are using
> pthread_sigmask, this should not affect other threads, and
> since we restore the signal mask immediately afterwards it should
> not affect the current thread visibly either.  Other possibly
> problematic signals are SIGCHLD and SIGPIPE and these are
> masked too.
>
> Note use of ignore_value: It's not fatal if we cannot mask out
> SIGWINCH, and in any case pthread_sigmask never fails on Linux
> as long as you supply the correct arguments.

ACK.

Paolo




More information about the libvir-list mailing list