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).
This commit is contained in:
tjr 2002-08-18 06:43:44 +00:00
parent a87152b560
commit 2f2bf8ffc0

View File

@ -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);