From 4f8fa749f0c3befcee389fbdea4cbcb7f149d9f6 Mon Sep 17 00:00:00 2001 From: "Tim J. Robbins" Date: Sun, 18 Aug 2002 06:43:44 +0000 Subject: [PATCH] Avoid accessing the current job's process table in the child part of forkshell() after it has been freed. This caused mysterious behaviour when anything but the first command in a pipeline tried to access the terminal when the `junk' malloc() option was enabled (which is the default). --- bin/sh/jobs.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bin/sh/jobs.c b/bin/sh/jobs.c index 2fd7aaa4e7d..ebf5ed8f900 100644 --- a/bin/sh/jobs.c +++ b/bin/sh/jobs.c @@ -741,9 +741,6 @@ forkshell(struct job *jp, union node *n, int mode) TRACE(("Child shell %d\n", (int)getpid())); wasroot = rootshell; rootshell = 0; - for (i = njobs, p = jobtab ; --i >= 0 ; p++) - if (p->used) - freejob(p); closescript(); INTON; clear_traps(); @@ -785,6 +782,11 @@ forkshell(struct job *jp, union node *n, int mode) } } #endif + INTOFF; + for (i = njobs, p = jobtab ; --i >= 0 ; p++) + if (p->used) + freejob(p); + INTON; if (wasroot && iflag) { setsignal(SIGINT); setsignal(SIGQUIT);