summaryrefslogtreecommitdiff
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.osdl.org>2003-10-09 01:13:56 -0700
committerLinus Torvalds <torvalds@home.osdl.org>2003-10-09 01:13:56 -0700
commit06349d9d2b7f57ebce92b2838a55722934e394f6 (patch)
treeec8020b2672cea8a8ff194f6a345ae1724baec4e /kernel/fork.c
parent6601345fc15e63c7972db7118df6e033678977f7 (diff)
Revert the process group accessor functions. They are buggy, and
cause NULL pointer references in /proc. Moreover, it's questionable whether the whole thing makes sense at all. Per-thread state is good. Cset exclude: davem@nuts.ninka.net|ChangeSet|20031005193942|01097 Cset exclude: akpm@osdl.org[torvalds]|ChangeSet|20031005180420|42200 Cset exclude: akpm@osdl.org[torvalds]|ChangeSet|20031005180411|42211
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 0afba3e0e0ac..1834f99dd054 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -743,12 +743,6 @@ static inline int copy_signal(unsigned long clone_flags, struct task_struct * ts
sig->curr_target = NULL;
init_sigpending(&sig->shared_pending);
- sig->tty = process_tty(current);
- sig->pgrp = process_group(current);
- sig->session = process_session(current);
- sig->leader = 0; /* session leadership doesn't inherit */
- sig->tty_old_pgrp = 0;
-
return 0;
}
@@ -795,9 +789,7 @@ struct task_struct *copy_process(unsigned long clone_flags,
* Thread groups must share signals as well, and detached threads
* can only be started up within the thread group.
*/
- if ((clone_flags & CLONE_THREAD) &&
- (clone_flags & (CLONE_SIGHAND|CLONE_DETACHED)) !=
- (CLONE_SIGHAND|CLONE_DETACHED))
+ if ((clone_flags & CLONE_THREAD) && !(clone_flags & CLONE_SIGHAND))
return ERR_PTR(-EINVAL);
/*
@@ -902,6 +894,8 @@ struct task_struct *copy_process(unsigned long clone_flags,
init_timer(&p->real_timer);
p->real_timer.data = (unsigned long) p;
+ p->leader = 0; /* session leadership doesn't inherit */
+ p->tty_old_pgrp = 0;
p->utime = p->stime = 0;
p->cutime = p->cstime = 0;
p->array = NULL;
@@ -1046,7 +1040,7 @@ struct task_struct *copy_process(unsigned long clone_flags,
if (thread_group_leader(p)) {
attach_pid(p, PIDTYPE_TGID, p->tgid);
attach_pid(p, PIDTYPE_PGID, process_group(p));
- attach_pid(p, PIDTYPE_SID, process_session(p));
+ attach_pid(p, PIDTYPE_SID, p->session);
if (p->pid)
__get_cpu_var(process_counts)++;
} else