harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vera Petrashkova (JIRA)" <j...@apache.org>
Subject [jira] Created: (HARMONY-4024) drlvm][thread] VM crashes when a lot of threads invoke setUncaughtExceptionHandler or setDefaultUncaughtExceptionHandler methods
Date Fri, 01 Jun 2007 12:08:21 GMT
drlvm][thread] VM crashes when a lot of threads invoke  setUncaughtExceptionHandler or setDefaultUncaughtExceptionHandler
methods
---------------------------------------------------------------------------------------------------------------------------------

                 Key: HARMONY-4024
                 URL: https://issues.apache.org/jira/browse/HARMONY-4024
             Project: Harmony
          Issue Type: Bug
          Components: DRLVM
         Environment: Windows
            Reporter: Vera Petrashkova
            Priority: Minor


The following test demonstrates that VM crashes when a lot of created threads use setUncaughtExceptionHandler

or setDefaultUncaughtExceptionHandler methods
--------------a1.java-------------------
public class a1  extends Thread { 
   public static int N_TH = 20; 
   public static void main (String[] argv) { 
        boolean def = true;
        if (argv.length > 0) {
            def = "true".equals(argv[0]);
        }
        try { 
            if (argv.length > 1) { 
                N_TH=Integer.parseInt(argv[1]); 
            } 
        } catch (Throwable e) { 
        } 
        a1_UncoughtExcHnd h = new a1_UncoughtExcHnd();
        for (int i = 0; i < 100000; i++) {
            test(def, h);
            if (i % 1000 == 0) {
                System.err.println("Step: " + i + "  finished");
            }
        }
        System.out.println("Test passed"); 
    }

    public static void test(boolean defUncaught, a1_UncoughtExcHnd hnd) {                
     
        a1 t[] = new a1[N_TH]; 
        for (int i = 0; i < N_TH; i++) { 
            t[i]=new a1();
            if (defUncaught) {
                t[i].setDefaultUncaughtExceptionHandler(hnd);
            } else {
                t[i].setUncaughtExceptionHandler(hnd);
            }
            t[i].start(); 
        } 
        try { 
            for (int i = 0; i < N_TH; i++) { 
                t[i].join(); 
            } 
        } catch (Throwable e) { 
            System.err.println(e); 
        } 
    } 

    public void m(int t) { 
       int t1 = 100/t;
    } 

    public void run() { 
        m(0); 
    } 
} 

class a1_UncoughtExcHnd implements Thread.UncaughtExceptionHandler {

public static int count = 0;
    public void uncaughtException(Thread t, Throwable e) {
        count++;
        throw new RuntimeException(e);
    }
}
--------------------------------
Run test with DefaultUncaughtExceptionHandler
java -cp . a1 true 20
and  with UncaughtExceptionHandler
java -cp . a1 false 20

This test passes on RI in both cases:
Output:
=======
On RI this test passes:
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)

Step: 0  finished
...
Step: 94000  finished
Step: 95000  finished
Step: 96000  finished
Step: 97000  finished
Step: 98000  finished
Step: 99000  finished
Test passed

DRLVM crashes on this test in both cases.
Output:
======
Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its l
icensors, as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r542118, (May 28 2007), Windows/ia32/msvc 1310, release build
http://incubator.apache.org/harmony
Step: 0  finished
The GC did not provide gc_add_weak_root_set_entry()
Step: 1000  finished
Windows reported exception: 0xc0000005
Registers:
    EAX: 0x00000000, EBX: 0x41c14bf8, ECX: 0x0e810048, EDX: 0x003927a4
    ESI: 0x00000000, EDI: 0x0babfe80, ESP: 0x0babfda0, EBP: 0x0babfddc
    EIP: 0x10002a1e
Stack trace:
  0: hythread_monitor_notify_all (??:-1)
  1: java/lang/VMThreadManager.notifyAll(Ljava/lang/Object;)I (VMThreadManager.java:-2)
  2: java/lang/Object.notifyAll()V (Object.java:65)
  3: java/lang/Thread.runImpl()V (Thread.java:667)
<end of stack trace>


DRLVM crashes even if only 1 thread is created on the each step.
java -cp . a1 true 1
Output
===========
Apache Harmony Launcher : (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors,
as applicable.
java version "1.5.0"
pre-alpha : not complete or compatible
svn = r542118, (May 28 2007), Windows/ia32/msvc 1310, release build
http://incubator.apache.org/harmony
Step: 0  finished
The GC did not provide gc_add_weak_root_set_entry()
Step: 1000  finished
Step: 2000  finished
Step: 3000  finished
....
Step: 29000  finished
Step: 30000  finished
Step: 31000  finished
Step: 32000  finished
Step: 33000  finished
Windows reported exception: 0xc0000005
Registers:
    EAX: 0x00000000, EBX: 0x41c17188, ECX: 0x0e810048, EDX: 0x003927a4
    ESI: 0x00000000, EDI: 0x041ffe80, ESP: 0x041ffda0, EBP: 0x041ffddc
    EIP: 0x10002a1e
Stack trace:
  0: hythread_monitor_notify_all (??:-1)
  1: java/lang/VMThreadManager.notifyAll(Ljava/lang/Object;)I (VMThreadManager.java:-2)
  2: java/lang/Object.notifyAll()V (Object.java:65)
  3: java/lang/Thread.runImpl()V (Thread.java:667)
<end of stack trace>


This bug causes the failure of the reliability test
     api.kernel.thread.ExcptHandlerTest.ExcptHandlerTest 
from http://issues.apache.org/jira/browse/HARMONY-2918


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message