]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit - kernel/signal.c
signal: do_sigtimedwait() needs retarget_shared_pending()
authorOleg Nesterov <oleg@redhat.com>
Wed, 27 Apr 2011 19:56:14 +0000 (21:56 +0200)
committerOleg Nesterov <oleg@redhat.com>
Thu, 28 Apr 2011 11:01:39 +0000 (13:01 +0200)
commitb182801ab35f7a0afb3cdf8ba5df464d04206b46
treedcdda5843c6453b60fe4adcf004283ac5f8e315b
parent943df1485a8ff0e600729e082e568ece04d4de9e
signal: do_sigtimedwait() needs retarget_shared_pending()

do_sigtimedwait() changes current->blocked and thus it needs
set_current_blocked()->retarget_shared_pending().

We could use set_current_blocked() directly. It is fine to change
->real_blocked from all-zeroes to ->blocked and vice versa lockless,
but this is not immediately clear, looks racy, and needs a huge
comment to explain why this is correct.

To keep the things simple this patch adds the new static helper,
__set_task_blocked() which should be called with ->siglock held. This
way we can change both ->real_blocked and ->blocked atomically under
->siglock as the current code does. This is more understandable.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Matt Fleming <matt.fleming@linux.intel.com>
kernel/signal.c