bin/55346: /bin/sh eats memory and CPU infinitely

David Schultz das at FreeBSD.ORG
Sun Aug 24 12:00:38 PDT 2003


The following reply was made to PR bin/55346; it has been noted by GNATS.

From: David Schultz <das at FreeBSD.ORG>
To: Eugene Grosbein <eugen at grosbein.pp.ru>
Cc: stable at FreeBSD.ORG, bug-followup at FreeBSD.ORG
Subject: Re: bin/55346: /bin/sh eats memory and CPU infinitely
Date: Sun, 24 Aug 2003 11:56:18 -0700

 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.


More information about the freebsd-bugs mailing list