Parmelan, Edouard EP510777 at
Tue Nov 17 07:38:27 PST 1998

Hi Godmar,

>  Edouard,
>  Unfortunately, releasing static locks is only part of a more fundamental
> problem.   In other instances, the problem results in memory leaks and 
> state corruption.  Basically, if a function doesn't return because it
> throws an exception, the caller won't have a chance to clean up its local
> state (locks, memory, other data structures).
> Look at such functions as tidyVerifyMethod or functions that need to free
> memory before returning.
> We discussed various solutions, and decided to go with old-fashioned
> error code propagation.  I have a simple error code based solution almost 
> done, and hope I'll be able to check it in soon.

Good idea, but what about a static initializer which throws an exception ?

The following ProcessClassTest class could help you
Segv Test:
  <clinit>() throws NullPointerException

First Test:
  <clinit>() try to initialize Segv which throws NullPointerException

Second Test:
  The super class don't exist

Third Test:
  <clinit>() try to initialize DontExist which don't exist

With your ``old-fashioned error code propagation'' you could simulate
the catch of the ClassNotFoundException.
How your old-fasioned error code propagation could catch the
NullPointerException ?
If the answer is ``Add a try/catch in your C code'' don't use
old-fashioned error code propagation and implements the ``try/catch''
for C functions :(

What about OutOfMemoryException, UnsatisfiedLinkError, and all
possible calls to throwException() in the VM methods...

The diff TranslateTest.diff use a pizza-0.39g bug: use a method in place
of a field for synchronized().  When you run this buggy class with kaffe,
the translator call getField() which don't found it and throw an exception,
so it translate Throwable.<clinit>(): Attempt to reenter verifier!

Comments ?
-------------- next part --------------
A non-text attachment was scrubbed...
Type: application/octet-stream
Size: 1640 bytes
Desc: not available
Url : 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: TranslateTest.diff
Type: application/octet-stream
Size: 459 bytes
Desc: not available
Url : 

More information about the kaffe mailing list