During our continued testing we've come across another scenario in which it
appears that threads are blocking each other - causing the appletviewer session
to hang. Similar to another bug we reported, this problem also occurs with the
combination of:
- Call to the dispose() method
- AWT Finalizer
however, what distinguishes this issue is that rather than a Graphics.dispose()
call, this is occurring with a Dialog.dispose() call.
To reproduce the problem, which is occurring with the WebForms Oracle product:
on win95 or winNT run, in the /home/richie/orcl/web/tests directory:
1 - appletviewer x.html
2 - click on the checkbox labelled 'Master Detail Block'
3 - in the second window which appears, select Query->Execute from the menu
4 - click on the TextField labelled 'Dname'
5 - select Edit->Edit from the menu
6 - make a change to value displayed in the Editor dialog
7 - click on the 'window close' button (top right corner)
8 - click on the 'No' button in the following dialog
9 - if the session isn't hung at this point, go to step 4 and repeat...
Here is a stack trace of what is going on:
Full thread dump:
"Forms-DialogThread1" (TID:0xf8fa78, sys_thread_t:0x8b0670, Win32ID:0x60, state:CW) prio=5
sun.awt.windows.WDialogPeer.show(WDialogPeer.java:55)
java.awt.Dialog.show(Dialog.java:205)
oracle.forms.uiClient.v1_4.ui.DialogThread.doDialog(DialogThread.java:231)
oracle.forms.uiClient.v1_4.ui.DialogThread.run(DialogThread.java:214)
java.lang.Thread.run(Thread.java:474)
"AWT-Finalizer" (TID:0xf931d0, sys_thread_t:0x8a91e0, Win32ID:0xa0, state:CW) prio=8
java.lang.Object.wait(Object.java:315)
sun.awt.AWTFinalizer.run(AWTFinalizer.java:48)
"Forms-Runform-1" (TID:0xf6fe10, sys_thread_t:0x889850, Win32ID:0xa6, state:S) prio=4
java.lang.Object.wait(Object.java:315)
oracle.forms.uiClient.v1_4.engine.Runform.startRunform(Runform.java:467)
oracle.forms.uiClient.v1_4.engine.Runform.run(Runform.java:383)
java.lang.Thread.run(Thread.java:474)
"Screen Updater" (TID:0xf6f428, sys_thread_t:0x899750, Win32ID:0x99, state:CW) prio=4
java.lang.Object.wait(Object.java:315)
sun.awt.ScreenUpdater.nextEntry(ScreenUpdater.java:78)
sun.awt.ScreenUpdater.run(ScreenUpdater.java:98)
"AWT-Windows" (TID:0xf6d9e8, sys_thread_t:0x894100, Win32ID:0x98, state:R) prio=5
sun.awt.windows.WToolkit.run(WToolkit.java:103)
java.lang.Thread.run(Thread.java:474)
"AWT-EventQueue-0" (TID:0xf6d920, sys_thread_t:0x8942d0, Win32ID:0x4e, state:CW) prio=5
java.lang.Object.wait(Object.java:315)
java.awt.EventQueue.getNextEvent(EventQueue.java:113)
java.awt.EventDispatchThread.run(EventDispatchThread.java:55)
"thread applet-oracle.forms.uiClient.v1_4.engine.Main" (TID:0xf6cb70, sys_thread_t:0x88dd50, Win32ID:0x86, state:S) prio=4
java.lang.Object.wait(Object.java:315)
sun.applet.AppletPanel.getNextEvent(AppletPanel.java:204)
sun.applet.AppletPanel.run(AppletPanel.java:230)
java.lang.Thread.run(Thread.java:474)
"Finalizer thread" (TID:0xf600d0, sys_thread_t:0x8749b0, Win32ID:0x5f, state:CW) prio=2
"main" (TID:0xf600a8, sys_thread_t:0x87d720, Win32ID:0xa1, state:CW) prio=5
Monitor Cache Dump:
sun.applet.AppletViewerPanel@F6C838/FCECA8: <unowned>
Waiters: 1
sun.awt.AWTFinalizer@F931D0/F98968: <unowned>
Waiters: 1
sun.awt.ScreenUpdater@F6F428/FD87D0: <unowned>
Waiters: 1
sun.awt.windows.WDialogPeer@F90840/1013818: <unowned>
Waiters: 1
oracle.forms.uiClient.v1_4.engine.Runform@F6FD48/FD9BA0: <unowned>
Waiters: 1
java.awt.EventQueue@F6D8D0/FD2DA0: <unowned>
Waiters: 1
Registered Monitor Dump:
Thread queue lock: <unowned>
Waiters: 1
Name and type hash table lock: <unowned>
String intern lock: <unowned>
JNI pinning lock: <unowned>
JNI global reference lock: <unowned>
BinClass lock: <unowned>
Class loading lock: <unowned>
Java stack lock: <unowned>
Code rewrite lock: <unowned>
Heap lock: <unowned>
Has finalization queue lock: <unowned>
Finalize me queue lock: <unowned>
Waiters: 1
Monitor cache expansion lock: <unowned>
Monitor registry: <unowned>
appears that threads are blocking each other - causing the appletviewer session
to hang. Similar to another bug we reported, this problem also occurs with the
combination of:
- Call to the dispose() method
- AWT Finalizer
however, what distinguishes this issue is that rather than a Graphics.dispose()
call, this is occurring with a Dialog.dispose() call.
To reproduce the problem, which is occurring with the WebForms Oracle product:
on win95 or winNT run, in the /home/richie/orcl/web/tests directory:
1 - appletviewer x.html
2 - click on the checkbox labelled 'Master Detail Block'
3 - in the second window which appears, select Query->Execute from the menu
4 - click on the TextField labelled 'Dname'
5 - select Edit->Edit from the menu
6 - make a change to value displayed in the Editor dialog
7 - click on the 'window close' button (top right corner)
8 - click on the 'No' button in the following dialog
9 - if the session isn't hung at this point, go to step 4 and repeat...
Here is a stack trace of what is going on:
Full thread dump:
"Forms-DialogThread1" (TID:0xf8fa78, sys_thread_t:0x8b0670, Win32ID:0x60, state:CW) prio=5
sun.awt.windows.WDialogPeer.show(WDialogPeer.java:55)
java.awt.Dialog.show(Dialog.java:205)
oracle.forms.uiClient.v1_4.ui.DialogThread.doDialog(DialogThread.java:231)
oracle.forms.uiClient.v1_4.ui.DialogThread.run(DialogThread.java:214)
java.lang.Thread.run(Thread.java:474)
"AWT-Finalizer" (TID:0xf931d0, sys_thread_t:0x8a91e0, Win32ID:0xa0, state:CW) prio=8
java.lang.Object.wait(Object.java:315)
sun.awt.AWTFinalizer.run(AWTFinalizer.java:48)
"Forms-Runform-1" (TID:0xf6fe10, sys_thread_t:0x889850, Win32ID:0xa6, state:S) prio=4
java.lang.Object.wait(Object.java:315)
oracle.forms.uiClient.v1_4.engine.Runform.startRunform(Runform.java:467)
oracle.forms.uiClient.v1_4.engine.Runform.run(Runform.java:383)
java.lang.Thread.run(Thread.java:474)
"Screen Updater" (TID:0xf6f428, sys_thread_t:0x899750, Win32ID:0x99, state:CW) prio=4
java.lang.Object.wait(Object.java:315)
sun.awt.ScreenUpdater.nextEntry(ScreenUpdater.java:78)
sun.awt.ScreenUpdater.run(ScreenUpdater.java:98)
"AWT-Windows" (TID:0xf6d9e8, sys_thread_t:0x894100, Win32ID:0x98, state:R) prio=5
sun.awt.windows.WToolkit.run(WToolkit.java:103)
java.lang.Thread.run(Thread.java:474)
"AWT-EventQueue-0" (TID:0xf6d920, sys_thread_t:0x8942d0, Win32ID:0x4e, state:CW) prio=5
java.lang.Object.wait(Object.java:315)
java.awt.EventQueue.getNextEvent(EventQueue.java:113)
java.awt.EventDispatchThread.run(EventDispatchThread.java:55)
"thread applet-oracle.forms.uiClient.v1_4.engine.Main" (TID:0xf6cb70, sys_thread_t:0x88dd50, Win32ID:0x86, state:S) prio=4
java.lang.Object.wait(Object.java:315)
sun.applet.AppletPanel.getNextEvent(AppletPanel.java:204)
sun.applet.AppletPanel.run(AppletPanel.java:230)
java.lang.Thread.run(Thread.java:474)
"Finalizer thread" (TID:0xf600d0, sys_thread_t:0x8749b0, Win32ID:0x5f, state:CW) prio=2
"main" (TID:0xf600a8, sys_thread_t:0x87d720, Win32ID:0xa1, state:CW) prio=5
Monitor Cache Dump:
sun.applet.AppletViewerPanel@F6C838/FCECA8: <unowned>
Waiters: 1
sun.awt.AWTFinalizer@F931D0/F98968: <unowned>
Waiters: 1
sun.awt.ScreenUpdater@F6F428/FD87D0: <unowned>
Waiters: 1
sun.awt.windows.WDialogPeer@F90840/1013818: <unowned>
Waiters: 1
oracle.forms.uiClient.v1_4.engine.Runform@F6FD48/FD9BA0: <unowned>
Waiters: 1
java.awt.EventQueue@F6D8D0/FD2DA0: <unowned>
Waiters: 1
Registered Monitor Dump:
Thread queue lock: <unowned>
Waiters: 1
Name and type hash table lock: <unowned>
String intern lock: <unowned>
JNI pinning lock: <unowned>
JNI global reference lock: <unowned>
BinClass lock: <unowned>
Class loading lock: <unowned>
Java stack lock: <unowned>
Code rewrite lock: <unowned>
Heap lock: <unowned>
Has finalization queue lock: <unowned>
Finalize me queue lock: <unowned>
Waiters: 1
Monitor cache expansion lock: <unowned>
Monitor registry: <unowned>