Skip site navigation (1)Skip section navigation (2)
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>