[kaffe] Freeing jit temp data on demand (Was: Re: JavaLayer 0.3.0

Dalibor Topic robilad@kaffe.org
Sat Sep 20 09:39:01 2003


Hi Tim,

thanks for taking the time to look into this. I've tried backing out the 
change as you propose, and it works for me (TM). But the jit-temp-data 
is no longer freed, so we are back at square one ;(

Timothy Stack wrote:

>>Okie, I've duplicated the problem, the gc is getting stuck and that eats 
>>up all the CPU.  In particular it gets stuck in startGC() looping on the 
>>finalizer list.  I tried backing out helmer's last changes to the GC and 
>>it seems to run fine again, but I'm not really sure where the bug is just 
>>yet.
> 
> 
> okie, the offending diff seems to be in gc-incremental.c:
> 
> @@ -639,7 +663,6 @@
>  startGC(Collector *gcif)
>  {
>  	gc_unit* unit;
> -	gc_unit* nunit;
>  
>  	gcStats.freedmem = 0;
>  	gcStats.freedobj = 0;
> @@ -663,9 +686,8 @@
>  	startTiming(&gc_time, "gctime-scan");
>  
>  	/* Walk all objects on the finalizer list */
> -	for (unit = gclists[finalise].cnext;
> -	     unit != &gclists[finalise]; unit = nunit) {
> -		nunit = unit->cnext;
> +	while (gclists[finalise].cnext != &gclists[finalise]) {
> +		unit = gclists[finalise].cnext;
>  		gcMarkObject(gcif, UTOMEM(unit));
>  	}
>  
> 
> Restoring the old version makes things work again, is this important for 
> the leak problem you found?

yep, jit-temp-data is back at 8M instead of a few 100K as before.

cheers,
dalibor topic