• Pavel Emelyanov's avatar
    signals: consolidate send_sigqueue and send_group_sigqueue · 9e3bd6c3
    Pavel Emelyanov authored
    Both functions do the same thing after proper locking, but with
    different sigpending structs, so move the common code into a helper.
    
    After this we have 4 places that look very similar: send_sigqueue: calls
    do_send_sigqueue and signal_wakeup send_group_sigqueue: calls
    do_send_sigqueue and __group_complete_signal __group_send_sig_info:
    calls send_signal and __group_complete_signal specific_send_sig_info:
    calls send_signal and signal_wakeup
    
    Besides, send_signal performs actions similar to do_send_sigqueue's
    and __group_complete_signal - to signal_wakeup.
    
    It looks like they can be consolidated gracefully.
    
    Oleg said:
    
      Personally, I think this change is very good.  But send_sigqueue() and
      send_group_sigqueue() have a very subtle difference which I was never able
      to understand.
    
      Let's suppose that sigqueue is already queued, and the signal is ignored
      (the latter means we should re-schedule cpu timer or handle overrruns).  In
      that case send_sigqueue() returns 0, but send_group_sigqueue() returns 1.
    
      I think this is not the problem (in fact, I think this patch makes the
      behaviour more correct), but I hope Thomas can take a look and confirm.
    Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
    Cc: Oleg Nesterov <oleg@tv-sign.ru>
    Cc: Roland McGrath <roland@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9e3bd6c3
signal.c 64.7 KB