From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2434 invoked by alias); 21 Jul 2004 21:47:18 -0000 Mailing-List: contact java-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-prs-owner@gcc.gnu.org Received: (qmail 2411 invoked by uid 48); 21 Jul 2004 21:47:17 -0000 Date: Wed, 21 Jul 2004 21:47:00 -0000 From: "mckinlay at redhat dot com" To: java-prs@gcc.gnu.org Message-ID: <20040721214713.16662.mckinlay@redhat.com> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug libgcj/16662] New: IllegalMonitorStateException in EventQueue.getNextEvent(): possible hash synchronization bug? X-Bugzilla-Reason: CC X-SW-Source: 2004-q3/txt/msg00082.txt.bz2 List-Id: The following exception is thrown, occasionally, during startup of AWT applications. It appears to happen during the _Jv_MonitorExit call when leaving EventQueue.getNextEvent(). It always occurs in the same place, during startup of the AWT application. An IllegalMonitorStateException here should not be possible - the thread must hold the lock when leaving wait(). The bug is reproducable about 1 in 10 times or so when starting an AWT application on my P4 hyperthreading system. AFAIK we have not seen it happen on a single-processor non-hyperthreading system. It seems that either: 1. AWT JNI code is doing something nefarious with locks. However, if this was the case, for example a double unlock, LOCK_DEBUG should detect it(?). or 2. Bug in hash synchronization code Exception during event dispatch: java.lang.IllegalMonitorStateException: current thread not owner at _Jv_MonitorExit (/local/gcc-clean/lib/libgcj.so.6.0.0) at java.awt.EventQueue.getNextEvent() (/local/gcc-clean/lib/libgcj.so.6.0.0) at java.awt.EventDispatchThread.run() (/local/gcc-clean/lib/libgcj.so.6.0.0) at _Jv_ThreadRun(java.lang.Thread) (/local/gcc-clean/lib/libgcj.so.6.0.0) at GC_start_routine (/local/gcc-clean/lib/libgcj.so.6.0.0) at __clone (/lib/tls/libc-2.3.3.so) I was not able to reproduce the problem with a runtime build with -DLOCK_DEBUG. However, defining LOCK_DEBUG in natObject.cc only, I was able to reproduce it: Lightweight lock held by other thread light_thr_id = 0xf7049960, self = 0x4904bb0, address = 0x9f7ccd2, pid = 3512 lock hash entry = 0x15da7d0, index = 291, address = 0x2 light_thr_id = 0x0, light_count = 0, heavy_count = 2 heavy_locks:(hl = 0x9f90f50, addr = 0x9f7ccd0) These are the thread stacks: [Switching to thread 1 (Thread -150693536 (LWP 3512))]#0 0x00bbd402 in ?? () (gdb) bt #0 0x00bbd402 in ?? () #1 0x00b06cbe in __lll_mutex_lock_wait () from /lib/tls/libpthread.so.0 #2 0x00b03c84 in _L_mutex_lock_29 () from /lib/tls/libpthread.so.0 #3 0x00000001 in ?? () #4 0xfee46d28 in ?? () #5 0x01440e00 in ?? () from /local/gcc/lib/libgcj.so.6 #6 0x09f90f68 in ?? () #7 0xf7049960 in ?? () #8 0xfee46d88 in ?? () #9 0x010bd61f in _Jv_MonitorEnter (obj=0x9f90f68) at java-threads.h:144 #10 0x010bd61f in _Jv_MonitorEnter (obj=0x9f7ccd0) at java-threads.h:144 #11 0x012339c8 in java.awt.EventQueue.postEvent(java.awt.AWTEvent) ( this=0x9f7ccd0, evt=0xa0abe70) at ../../../libjava/java/awt/EventQueue.java:163 #12 0x012294f5 in java.awt.Component.reshape(int, int, int, int) ( this=0xa08ea00, x=5, y=47, width=428, height=383) at ../../../libjava/java/awt/Component.java:1414 #13 0x012292b0 in java.awt.Component.setBounds(int, int, int, int) ( this=0xb0bff4, x=-4, y=-4, w=-4, h=-4) at ../../../libjava/java/awt/Component.java:1364 #14 0x01221794 in java.awt.BorderLayout.setBounds(java.awt.Component, int, int, int, int) (this=0x9fcfc90, comp=0xa08ea00, x=-4, y=-4, w=-4, h=-4) at ../../../libjava/java/awt/BorderLayout.java:638 #15 0x01221edd in java.awt.BorderLayout.layoutContainer(java.awt.Container) ( this=0x9fcfc90, target=0x9ff7ea0) at ../../../libjava/java/awt/BorderLayout.java:612 #16 0x0122fc2f in java.awt.Container.layout() (this=0x9ff7ea0) at ../../../libjava/java/awt/Container.java:501 #17 0x0122fbd4 in java.awt.Container.doLayout() (this=0xfffffffc) at ../../../libjava/java/awt/Container.java:490 #18 0x0122fdf4 in java.awt.Container.validateTree() (this=0x9ff7ea0) at ../../../libjava/java/awt/Container.java:557 #19 0x0122fcc4 in java.awt.Container.validate() (this=0x9ff7ea0) at ../../../libjava/java/awt/Container.java:522 #20 0x0124683f in java.awt.Window.pack() (this=0x9ff7ea0) at ../../../libjava/java/awt/Window.java:213 #21 0x0805f0fd in junit.awtui.TestRunner.createUI(java.lang.String) () #22 0x0806036f in junit.awtui.TestRunner.start(java.lang.String[]) () #23 0x0805f7c6 in junit.awtui.TestRunner.main(java.lang.String[]) () #24 0x010b1e85 in gnu::java::lang::MainThread::call_main (this=0x9f90f88) at ../../../libjava/gnu/java/lang/natMainThread.cc:47 #25 0x01144992 in gnu.java.lang.MainThread.run() (this=0x9f90f88) at ../../../libjava/gnu/java/lang/MainThread.java:101 #26 0x010c26db in _Jv_ThreadRun (thread=0x9f90f88) at ../../../libjava/java/lang/natThread.cc:281 #27 0x010973a8 in _Jv_RunMain (klass=0x806cde0, name=0x0, argc=1, argv=0xfee471e4, is_jar=false) at ../../../libjava/prims.cc:1076 #28 0x01097467 in JvRunMain (klass=0xfffffffc, argc=-4, argv=0xfffffffc) at ../../../libjava/prims.cc:1086 #29 0x080557e4 in main () [Switching to thread 2 (Thread 120093616 (LWP 3515))]#0 0x00bbd402 in ?? () (gdb) bt #0 0x00bbd402 in ?? () #1 0x00979a27 in poll () from /lib/tls/libc.so.6 #2 0x00b36da6 in g_main_loop_get_context () from /usr/lib/libglib-2.0.so.0 #3 0x00b361e0 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #4 0x00b368a3 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0 #5 0x0040f403 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0 #6 0x00a837dc in Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkMain ( env=0x9f141f8, obj=0x9fce1c0) at ../../../libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c:215 #7 0x00a72870 in gnu.java.awt.peer.gtk.GtkMainThread.gtkMain() ( this=0xfffffffc) at ../../../libjava/gnu/java/awt/peer/gtk/GtkMainThread.java:47 #8 0x00a72a12 in gnu.java.awt.peer.gtk.GtkMainThread.run() (this=0x9fce1c0) at ../../../libjava/gnu/java/awt/peer/gtk/GtkMainThread.java:75 #9 0x010ddeb5 in java.lang.Thread.run() (this=0x9f7cc30) at ../../../libjava/java/lang/Thread.java:649 #10 0x010c26db in _Jv_ThreadRun (thread=0x9f7cc30) at ../../../libjava/java/lang/natThread.cc:281 #11 0x01094c50 in really_start (x=0x9fa2fe8) at ../../../libjava/posix-threads.cc:384 #12 0x01293eb1 in GC_start_routine (arg=0x9f5edc0) at ../../../boehm-gc/pthread_support.c:1180 #13 0x00b0198c in start_thread () from /lib/tls/libpthread.so.0 #14 0x0098316a in clone () from /lib/tls/libc.so.6 [Switching to thread 3 (Thread 76565424 (LWP 3514))]#0 0x010bd991 in _Jv_MonitorExit (obj=0x9f7ccd0) at ../../../libjava/java/lang/natObject.cc:983 983 print_he(he); (gdb) bt #0 0x010bd991 in _Jv_MonitorExit (obj=0x9f7ccd0) at ../../../libjava/java/lang/natObject.cc:983 #1 0x01233800 in java.awt.EventQueue.getNextEvent() (this=0x9f7ccd0) at ../../../libjava/java/awt/EventQueue.java:93 #2 0x01233620 in java.awt.EventDispatchThread.run() (this=0x9fcffc0) at ../../../libjava/java/awt/EventDispatchThread.java:64 #3 0x010c26db in _Jv_ThreadRun (thread=0x9fcffc0) at ../../../libjava/java/lang/natThread.cc:281 #4 0x01094c50 in really_start (x=0x9fa2ff0) at ../../../libjava/posix-threads.cc:384 #5 0x01293eb1 in GC_start_routine (arg=0x9f5edc0) at ../../../boehm-gc/pthread_support.c:1180 #6 0x00b0198c in start_thread () from /lib/tls/libpthread.so.0 #7 0x0098316a in clone () from /lib/tls/libc.so.6 [Switching to thread 4 (Thread 33495984 (LWP 3513))]#0 0x00bbd402 in ?? () (gdb) bt #0 0x00bbd402 in ?? () #1 0x00b04790 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/libpthread.so.0 #2 0x010946ff in _Jv_CondWait (cv=0x15d5500, mu=0x15d5520, millis=Unhandled dwarf expression opcode 0x93 ) at ../../../libjava/posix-threads.cc:150 #3 0x010b0e36 in gnu::gcj::runtime::FinalizerThread::run (this=0x9f7cd70) at ../../../libjava/gnu/gcj/runtime/natFinalizerThread.cc:57 #4 0x010c26db in _Jv_ThreadRun (thread=0x9f7cd70) at ../../../libjava/java/lang/natThread.cc:281 #5 0x01094c50 in really_start (x=0x9fa2ff8) at ../../../libjava/posix-threads.cc:384 #6 0x01293eb1 in GC_start_routine (arg=0x9f5efa0) at ../../../boehm-gc/pthread_support.c:1180 #7 0x00b0198c in start_thread () from /lib/tls/libpthread.so.0 #8 0x0098316a in clone () from /lib/tls/libc.so.6 -- Summary: IllegalMonitorStateException in EventQueue.getNextEvent(): possible hash synchronization bug? Product: gcc Version: 3.5.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: libgcj AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mckinlay at redhat dot com CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16662