Hi,

I have possible bug report with threading and nested locks.
When two threads are nested on the same lock and one (or both) of 
them sleeps inside the nest, an IllegalMonitorStateException will be 
thrown.  The lock in question is allocated as a fast lock, however, 
when the sleep method is called it enters the slow lock code, and 
gets corrupted.

A simple test program is included below

This program works under Java(TM) 2 Runtime Environment, Standard 
Edition (build 1.3.1-b24), Java HotSpot(TM) Client VM (build 1.3.1-
b24, mixed mode).

It fails under kaffe-1.0.6.



-----------------------------Program start---------------------------
/***************************************************************

            COPYRIGHT NOTICE

    This file remains the intellectual property of:

        DCT Limited
        www.dctl.com
        Unit 5, Windmill Business Village
        Brooklands Close
        Sunbury-Upon-Thames,  TW19 7DY

    All rights reserved. Copyright DCT Limited: 2002

***************************************************************/

public class NestedLocks {

    public LockObj lock = new LockObj();

    public NestedLocks() {
    new SecondThread().start();

    synchronized(lock) {
        debug("(1) Got lock: " + lock);
        synchronized(lock) {
        debug("(2) Got lock: " + lock);
        try {
            Thread.sleep(500);
        } catch (InterruptedException ie) {
            debug("Sleep interrupted: "+ie);
        }
        debug("Slept for 500 ms");
        }
        debug("(2) Released lock");
    }   
    debug("(1) Released lock");
    }
    
    public void debug(String s) {
    System.out.println(s);
    }
    
    public static void main(String [] args) {
    new NestedLocks();
    }


    /********* SECOND THREAD **********/
    class SecondThread extends Thread {
    public void run() {
        synchronized(lock) {
        debug("T2:(1) Got lock: " + lock);
        try {
            Thread.sleep(500);
        } catch (InterruptedException ie) {
            debug("Sleep interrupted: "+ie);
        }
        debug("Slept for 500 ms");
        }
        debug("T2:(1) Released lock");
    }
    }

}


class LockObj {
    static int count = 0;
    int id;
    public LockObj() {
    id = count++;
    }
    public String toString() {
    return ("LOCK#"+id);
    }
}
---------------------------------------------------------------------
-- 
Paul Hounslow                   DCT Limited
Email:                          [EMAIL PROTECTED]
Tel:                            +44 1932 766515
Fax:                            +44 1932 782811
Web:    http://www.dctl.com/


_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to