]> git.neil.brown.name Git - history.git/commit
[PATCH] fix for potential deadlock after posix-timers change
authorRoland McGrath <roland@redhat.com>
Tue, 20 Apr 2004 00:20:06 +0000 (17:20 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 20 Apr 2004 00:20:06 +0000 (17:20 -0700)
commitf3276a186a0cb1157d771768bf5e79f020e4c746
tree8789a1ed80aee4b622dc9abd29a2c78b26537f1a
parentb4389817f141203a4cd10ffc7890dd9139df65e7
[PATCH] fix for potential deadlock after posix-timers change

Ulrich has been working on the glibc code using posix-timers and
stressing it more now than it has before.  He ran into an SMP deadlock
on process exit in the case there are pending queued signals from a
timer.

The deadlock arises because in the path through exit_itimers, the
tasklist_lock is already held (for writing).  When a timer is being
deleted, sigqueue_free will try to take it (for reading) in the case
where that timer has a pending signal queued on somebody's queue.  This
patch avoids the problem by making sure the queues are flushed before
calling exit_itimers, thus ensuring its code path won't try to take
tasklist_lock.
kernel/signal.c