diff options
author | Roland McGrath <roland@redhat.com> | 2005-10-21 15:03:29 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-21 15:38:08 -0700 |
commit | 25f407f0b668f5e4ebd5d13e1fb4306ba6427ead (patch) | |
tree | 10d8661419da9e0d6be6d22ef319582d052c4a26 /kernel/posix-timers.c | |
parent | 9465bee863bc4c6cf1566c12d6f92a8133e3da5c (diff) | |
download | lwn-25f407f0b668f5e4ebd5d13e1fb4306ba6427ead.tar.gz lwn-25f407f0b668f5e4ebd5d13e1fb4306ba6427ead.zip |
[PATCH] Call exit_itimers from do_exit, not __exit_signal
When I originally moved exit_itimers into __exit_signal, that was the only
place where we could reliably know it was the last thread in the group
dying, without races. Since then we've gotten the signal_struct.live
counter, and do_exit can reliably do group-wide cleanup work.
This patch moves the call to do_exit, where it's made without locks. This
avoids the deadlock issues that the old __exit_signal code's comment talks
about, and the one that Oleg found recently with process CPU timers.
[ This replaces e03d13e985d48ac4885382c9e3b1510c78bd047f, which is why
it was just reverted. ]
Signed-off-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/posix-timers.c')
-rw-r--r-- | kernel/posix-timers.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c index b7b532acd9fc..dda3cda73c77 100644 --- a/kernel/posix-timers.c +++ b/kernel/posix-timers.c @@ -1157,7 +1157,7 @@ retry_delete: } /* - * This is called by __exit_signal, only when there are no more + * This is called by do_exit or de_thread, only when there are no more * references to the shared signal_struct. */ void exit_itimers(struct signal_struct *sig) |