aboutsummaryrefslogtreecommitdiffstats
path: root/fs/exec.c
diff options
context:
space:
mode:
authorTony Luck <tony.luck@intel.com>2005-07-13 15:15:43 -0400
committerTony Luck <tony.luck@intel.com>2005-07-13 15:15:43 -0400
commit99ad25a313bda566a346b46a6015afa65bc0a02b (patch)
treeb9443fed1ab74f320c4ee0791864ee96d7c069df /fs/exec.c
parentf62c4a96f74d6c6dd56d1742697e94a5c2085e87 (diff)
parent9a556e89081b0c1c2f83cee915363b15a68a6f2d (diff)
Auto merge with /home/aegl/GIT/linus
Diffstat (limited to 'fs/exec.c')
-rw-r--r--fs/exec.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/exec.c b/fs/exec.c
index 48871917d363..222ab1c572d8 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -642,6 +642,18 @@ static inline int de_thread(struct task_struct *tsk)
642 count = 2; 642 count = 2;
643 if (thread_group_leader(current)) 643 if (thread_group_leader(current))
644 count = 1; 644 count = 1;
645 else {
646 /*
647 * The SIGALRM timer survives the exec, but needs to point
648 * at us as the new group leader now. We have a race with
649 * a timer firing now getting the old leader, so we need to
650 * synchronize with any firing (by calling del_timer_sync)
651 * before we can safely let the old group leader die.
652 */
653 sig->real_timer.data = (unsigned long)current;
654 if (del_timer_sync(&sig->real_timer))
655 add_timer(&sig->real_timer);
656 }
645 while (atomic_read(&sig->count) > count) { 657 while (atomic_read(&sig->count) > count) {
646 sig->group_exit_task = current; 658 sig->group_exit_task = current;
647 sig->notify_count = count; 659 sig->notify_count = count;