summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Cox2006-09-29 11:00:41 +0200
committerLinus Torvalds2006-09-29 18:18:16 +0200
commit3cfd0885fac78c130a119ed576d18b5948fa2a5a (patch)
tree9a49ab330a39fc32cff3208038f1cef7763780aa
parent[PATCH] tty: lock ticogwinsz (diff)
downloadkernel-qcow2-linux-3cfd0885fac78c130a119ed576d18b5948fa2a5a.tar.gz
kernel-qcow2-linux-3cfd0885fac78c130a119ed576d18b5948fa2a5a.tar.xz
kernel-qcow2-linux-3cfd0885fac78c130a119ed576d18b5948fa2a5a.zip
[PATCH] tty: stop the tty vanishing under procfs access
Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--fs/proc/array.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 0b615d62a159..c0e554971df0 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -347,6 +347,8 @@ static int do_task_stat(struct task_struct *task, char * buffer, int whole)
sigemptyset(&sigign);
sigemptyset(&sigcatch);
cutime = cstime = utime = stime = cputime_zero;
+
+ mutex_lock(&tty_mutex);
read_lock(&tasklist_lock);
if (task->sighand) {
spin_lock_irq(&task->sighand->siglock);
@@ -388,6 +390,7 @@ static int do_task_stat(struct task_struct *task, char * buffer, int whole)
}
ppid = pid_alive(task) ? task->group_leader->real_parent->tgid : 0;
read_unlock(&tasklist_lock);
+ mutex_unlock(&tty_mutex);
if (!whole || num_threads<2)
wchan = get_wchan(task);