On Tue, Jul 04, 2017 at 11:27:04AM +0200, Paolo Bonzini wrote:
> Using signal to establish a signal handler is not portable; on
> SysV systems, the signal handler would be reset to SIG_DFL after
> delivery, while BSD preserves the signal handler.  Daniel Berrange
> reported that (to complicate matters further) the signal system call
> has SysV behavior, but glibc signal() actually calls the sigaction
> system call to provide BSD behavior.
> 
> However, using signal() to set a signal's disposition to SIG_DFL
> or SIG_IGN is portable and is a relatively common occurrence in
> QEMU source code, so allow that.
> 
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>

This looks good.  Ignore the parallel version which I just sent :-(

  Reviewed-by: Richard W.M. Jones <rjo...@redhat.com>

Rich.

>  scripts/checkpatch.pl | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 45027b9281..73efc927a9 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -2473,6 +2473,10 @@ sub process {
>               if ($line =~ /\b(strto[^kd].*?)\s*\(/) {
>                       ERROR("consider using qemu_$1 in preference to $1\n" . 
> $herecurr);
>               }
> +# recommend sigaction over signal for portability, when establishing a 
> handler
> +             if ($line =~ /\bsignal\s*\(/ && !($line =~ /SIG_(?:IGN|DFL)/)) {
> +                     ERROR("use sigaction to establish signal handlers; 
> signal is not portable\n" . $herecurr);
> +             }
>  # check for module_init(), use category-specific init macros explicitly 
> please
>               if ($line =~ /^module_init\s*\(/) {
>                       ERROR("please use block_init(), type_init() etc. 
> instead of module_init()\n" . $herecurr);
> -- 
> 2.13.0
> 

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v

Reply via email to