[libvirt] [PATCH] virsh: block SIGINT while getting BlockJobInfo

Eric Blake eblake at redhat.com
Fri Oct 12 03:10:24 UTC 2012


On 10/11/2012 09:12 AM, Ján Tomko wrote:
> SIGINT hasn't been blocked, which could lead to losing it somewhere in
> virDomainGetBlockJobInfo and not aborting the job.

Indeed, looking at vshWatchJob, we do the same around other libvirt APIs
when waiting for Ctrl-C; the problem is that if SIGINT arrives in the
middle of a libvirt API, then it can cause poll() to fail with EINTR,
and libvirt doesn't handle that well.  Delaying the SIGINT until after
we are out of libvirt API, and thus sure that an embedded poll() won't
be interrupted, prevents some odd failures, including failures which
leave the block job running instead of halting it.

[I still wonder if libvirt shouldn't be so sensitive to EINTR failures
on poll(), and/or whether the virsh loop should be a bit smarter about
handling libvirt failure when it also knows that SIGINT fired, but
that's a question for another day]

[Also for another day - blockcopy, blockpull, and blockcommit share an
awfully similar Ctrl-C polling loop.  It might be nice to refactor this
code to avoid the duplication, and/or convert things over to waiting for
libvirt events instead of polling]

> ---
>  tools/virsh-domain.c |   24 ++++++++++++++++++------
>  1 files changed, 18 insertions(+), 6 deletions(-)

ACK and pushed, with one nit:

> @@ -1674,7 +1682,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)
>      int timeout = 0;
>      struct sigaction sig_action;
>      struct sigaction old_sig_action;
> -    sigset_t sigmask;
> +    sigset_t sigmask,oldsigmask;

Missing a space here.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 617 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20121011/8946c652/attachment-0001.sig>


More information about the libvir-list mailing list