[kaffe] Re: Destroyed strings...

Timothy Stack stack@cs.utah.edu
Wed, 5 Jun 2002 14:30:02 -0600 (MDT)


> 
> Godmar wrote:
> > The string with the dead char array should at this point already be
> > scheduled for destruction.  So one possible way would be to take the
> > gc_lock and block on intern() if the mustfree is not empty.
> 
> That seems like it might work...
> 
> 
> > A quick hack would be to destroy all strings first then the rest,
> > this way a string would always be destroyed before its char[]
> > object.
> 
> Hmmm... actually, we could pretty easily have two mustfree lists.  One
> for objects with "destroy" methods, and one for all the other objects.
> That would accomplish the ordering without too much magic required in
> finishGC.
> 
> Its not pretty, though.

Don't we still having the same problem with a second thread though:

thread    action
U1        s = io.readLine(); // reads "FooBar"
GC        STOPWORLD();
GC        puts interned "FooBar" on mustfree list.
GC        RESUMEWORLD();
U1        s.intern();
GC        stringDestory("FooBar");

Now U1 has a pointer to something thats been freed...  right?  Maybe i'm
missing something.

> Given that we know what's happening, I've been surprised by the fact
> that I can't come up with a test case that causes this problem on
> existing Kaffe, or other engines.  I'd have more faith in a fix for
> this problem if there was a test case that caused the problem on more
> installations of Kaffe than just the 
> interp-debug-with-per-JNI-method-exceptions-patch....
>
> Let me know if you can come up with a test case that tickles this
> problem....

seems impossible to make something reliable here...

> -Pat

tim