• P
    signals: consolidate send_sigqueue and send_group_sigqueue · 9e3bd6c3
    Pavel Emelyanov 提交于
    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: NPavel 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: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    9e3bd6c3
signal.c 64.7 KB