This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug libgcj/16662] New: IllegalMonitorStateException in EventQueue.getNextEvent(): possible hash synchronization bug?


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]