I am opening a native print dialog by calling PrinterJob.printDialog() and clicking on the 'print' button. Once the print data is printed, I expect the application to terminate (there is no code after the print() call) but the application is not terminating. It just waits there for ever. This happens regardless of whether I print the contents or cancel the dialog.
This is reproducible on WinXP only on Mustang. This is not reproducible with Mustang-b51 but reproducible on Mustang-b53. Hence this is a regression introduced in either b52 or b53.
I have attached a sample test. Execute the sample test. You would see a native print dialog on the screen. Press 'ESC'. The native dialog gets disposed. Check whether the application has terminated. If not, the bug is reproduced.
Here is the thread dump:
-------------------------
Full thread dump Java HotSpot(TM) Client VM (1.6.0-rc-b61 mixed mode):
"DestroyJavaVM" prio=6 tid=0x00036400 nid=0x127e0 waiting on condition [0x000000
00..0x008ffd4c]
java.lang.Thread.State: RUNNABLE
"AWT-EventQueue-0" prio=6 tid=0x0ae2b600 nid=0x11724 in Object.wait() [0x0b6bf00
0..0x0b6bfd14]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02e85ff0> (a java.awt.EventQueue)
at java.lang.Object.wait(Object.java:484)
at java.awt.EventQueue.getNextEvent(EventQueue.java:480)
- locked <0x02e85ff0> (a java.awt.EventQueue)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:245)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
"Thread-2" daemon prio=6 tid=0x0ae2a600 nid=0x127f8 runnable [0x0b5ef000..0x0b5e
fa14]
java.lang.Thread.State: RUNNABLE
at sun.print.Win32PrintServiceLookup.notifyPrinterChange(Native Method)
at sun.print.Win32PrintServiceLookup.access$100(Win32PrintServiceLookup.
java:32)
at sun.print.Win32PrintServiceLookup$PrinterChangeListener.run(Win32Prin
tServiceLookup.java:302)
"AWT-Windows" daemon prio=6 tid=0x0ade5000 nid=0x1215c runnable [0x0b07f000..0x0
b07fa94]
java.lang.Thread.State: RUNNABLE
at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(WToolkit.java:290)
at java.lang.Thread.run(Thread.java:626)
"AWT-Shutdown" prio=6 tid=0x0ade1500 nid=0x401c in Object.wait() [0x0b02f000..0x
0b02fb14]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02a10510> (a java.lang.Object)
at java.lang.Object.wait(Object.java:484)
at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:259)
- locked <0x02a10510> (a java.lang.Object)
at java.lang.Thread.run(Thread.java:626)
"Java2D Disposer" daemon prio=10 tid=0x0adde500 nid=0x6440 in Object.wait() [0x0
afdf000..0x0afdfb94]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02a105a8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
- locked <0x02a105a8> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
at sun.java2d.Disposer.run(Disposer.java:123)
at java.lang.Thread.run(Thread.java:626)
"Low Memory Detector" daemon prio=6 tid=0x0aaf6100 nid=0x12420 runnable [0x00000
000..0x00000000]
java.lang.Thread.State: RUNNABLE
"CompilerThread0" daemon prio=10 tid=0x0aaf3b00 nid=0x11f28 waiting on condition
[0x00000000..0x0acdf764]
java.lang.Thread.State: RUNNABLE
"Attach Listener" daemon prio=10 tid=0x0aaf2c00 nid=0x11bc0 runnable [0x00000000
..0x00000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0x0aaf2100 nid=0x11900 waiting on conditi
on [0x00000000..0x00000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=0x0aae5f00 nid=0x5b20 in Object.wait() [0x0abef000
..0x0abefa94]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02a10800> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
- locked <0x02a10800> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
"Reference Handler" daemon prio=10 tid=0x0aae1d00 nid=0x127f0 in Object.wait() [
0x0ab9f000..0x0ab9fb14]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02a10890> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:484)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0x02a10890> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=10 tid=0x0aadee00 nid=0x107c runnable
"VM Periodic Task Thread" prio=10 tid=0x0aaf7400 nid=0x44f0 waiting on condition
JNI global references: 652