X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fsys.c;h=a87239d9eb706a5fc6713eec00b04112ea87c97e;hb=7172c64a7cee4dfa95864f49c914f7ea8cf497c8;hp=ca7ce522811bbc2cdbff43fb64d3d1a774021ce3;hpb=3967a72a825e44bff5d10f516e90b6f59f59e599;p=linux-2.6.git diff --git a/kernel/sys.c b/kernel/sys.c index ca7ce5228..a87239d9e 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1395,7 +1395,6 @@ asmlinkage long sys_setsid(void) pid_t session; int err = -EPERM; - mutex_lock(&tty_mutex); write_lock_irq(&tasklist_lock); /* Fail if I am already a session leader */ @@ -1415,12 +1414,15 @@ asmlinkage long sys_setsid(void) group_leader->signal->leader = 1; __set_special_pids(session, session); + + spin_lock(&group_leader->sighand->siglock); group_leader->signal->tty = NULL; group_leader->signal->tty_old_pgrp = 0; + spin_unlock(&group_leader->sighand->siglock); + err = process_group(group_leader); out: write_unlock_irq(&tasklist_lock); - mutex_unlock(&tty_mutex); return err; }