[kaffe] failed resgressions on Solaris

Helmer Krämer hkraemer@freenet.de
Fri Aug 29 07:14:02 2003


On Fri, 29 Aug 2003 13:12:10 +0000 (UTC)
Riccardo <zuse@libero.it> wrote:

Hi Riccardo,

> I was able to build kaffe on Solaris/Sparc and regression testing 
> yielded 7 failed tests,
> 
> CLTestConc.fail            SoInterrupt.fail
> GCTest.fail                TestUnlock.fail
> NetworkInterfaceTest.fail  ThreadState.fail
> NoClassDefTest.fail
> 
> I attach those files!
 
thanks for the testing ;)

Looking at these tests, it occured to me that both jit
and jit3 seem to have a problem with unlocking objects
while dispatching an exception ?!??

When kaffe encounters a synchronized method somewhere
on the stack while dispatching an exception, the monitor
of that method has to be unlocked. In order to do this,
kaffe calls unlockMutexIfHeld and passes the fp of the
stack frame as the where parameter. However, this only
works if the fp of the stack frame has also been passed
as the where parameter to lockMutex when the method was
called.

The problem is, that the jit engine calls lockObject
to lock a monitor, which passes anything but definitely
not the fp of the synchronized method to lockMutex,
which means that these monitors cannot be properly
unlocked while dispatching the exception. 

To solve this, it seems that we would either have to
invent a way to retrieve the fp of the current method
or we'd have to add something like the HAVE_mon_enter
in jit3 i386 to jit and the other architectures ?

Greetings,
Helmer