Date: Sun, 24 Aug 2003 11:56:18 -0700 From: David Schultz <das@FreeBSD.ORG> To: Eugene Grosbein <eugen@grosbein.pp.ru> Cc: bug-followup@FreeBSD.ORG Subject: Re: bin/55346: /bin/sh eats memory and CPU infinitely Message-ID: <20030824185618.GA3837@HAL9000.homeunix.com> In-Reply-To: <20030815211321.A11482@grosbein.pp.ru> References: <20030815211321.A11482@grosbein.pp.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Aug 15, 2003, Eugene Grosbein wrote: > I think I've found a memory leak in /bin/sh. > There is a case when dowait() and does frees resources of > completed job correctly. Here is a patch: > > Index: jobs.c > =================================================================== > RCS file: /home/ncvs/src/bin/sh/jobs.c,v > retrieving revision 1.27.2.11 > diff -u -r1.27.2.11 jobs.c > --- jobs.c 22 Jul 2003 13:11:26 -0000 1.27.2.11 > +++ jobs.c 15 Aug 2003 13:02:23 -0000 > @@ -960,10 +960,8 @@ > if (jp->state != state) { > TRACE(("Job %d: changing state from %d to %d\n", jp - jobtab + 1, jp->state, state)); > jp->state = state; > -#if JOBS > if (done) > - deljob(jp); > -#endif > + freejob(jp); > } > } > } I don't think this is right. This will cause jobs to be freed even when they shouldn't be. The general problem you're complaining about (here and earlier) is that /bin/sh only checks for the termination of backgrounded children when it displays a prompt, and of course it doesn't do that in the middle of a while loop. I don't know what the various standards have to say about this, but the behavior is probably just a bug.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030824185618.GA3837>