JDK-8031694 : [macosx] TwentyThousandTest test intermittently hangs
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.awt
  • Affected Version: 8,9
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2014-01-14
  • Updated: 2014-07-29
  • Resolved: 2014-02-13
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 JDK 9
8u20Fixed 9 b06Fixed
Related Reports
Relates :  
Relates :  
Description
Tested on latest 9/client and jdk 8 b123 on macosx.
test\javax\swing\JFileChooser\6396844\TwentyThousandTest.java

The problem goes away if i revert back 2228674
(but the test fails with OOM it is another bug)

Stack trace(Note that there is no EDT):

Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.0-b62 mixed mode):

"Attach Listener" #202 daemon prio=9 os_prio=31 tid=0x00007fb176974800 nid=0x4c0b waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"TimerQueue" #24 daemon prio=5 os_prio=31 tid=0x00007fb1788b0000 nid=0xe91b waiting on condition [0x000000017864f000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x000000011e17f4d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
	at java.util.concurrent.DelayQueue.take(DelayQueue.java:211)
	at javax.swing.TimerQueue.run(TimerQueue.java:171)
	at java.lang.Thread.run(Thread.java:744)

"Java2D Disposer" #15 daemon prio=10 os_prio=31 tid=0x00007fb1740f9800 nid=0xb903 in Object.wait() [0x000000016f8ef000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142)
	- locked <0x000000011e124ad8> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:158)
	at sun.java2d.Disposer.run(Disposer.java:150)
	at java.lang.Thread.run(Thread.java:744)

"Java2D Queue Flusher" #14 daemon prio=10 os_prio=31 tid=0x00007fb174039800 nid=0xa51f in Object.wait() [0x000000016e477000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at sun.java2d.opengl.OGLRenderQueue$QueueFlusher.run(OGLRenderQueue.java:208)
	- locked <0x000000011e1235c0> (a sun.java2d.opengl.OGLRenderQueue$QueueFlusher)

"AppKit Thread" #12 daemon prio=5 os_prio=31 tid=0x00007fb1750ad000 nid=0xf07 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"MainThread" #11 prio=5 os_prio=31 tid=0x00007fb175030800 nid=0x6a03 in Object.wait() [0x000000016a028000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at java.awt.EventQueue.invokeAndWait(EventQueue.java:1294)
	- locked <0x00000001243ca6f0> (a java.awt.EventQueue$1AWTInvocationLock)
	at java.awt.EventQueue.invokeAndWait(EventQueue.java:1275)
	at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1350)
	at TwentyThousandTest.doAttempt(TwentyThousandTest.java:104)
	at TwentyThousandTest.main(TwentyThousandTest.java:84)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at com.sun.javatest.regtest.MainWrapper$MainThread.run(MainWrapper.java:94)
	at java.lang.Thread.run(Thread.java:744)

"Service Thread" #9 daemon prio=9 os_prio=31 tid=0x00007fb17402f000 nid=0x6603 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C1 CompilerThread3" #8 daemon prio=9 os_prio=31 tid=0x00007fb176001800 nid=0x6403 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread2" #7 daemon prio=9 os_prio=31 tid=0x00007fb177828800 nid=0x6203 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" #6 daemon prio=9 os_prio=31 tid=0x00007fb177828000 nid=0x6003 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007fb17781d800 nid=0x5e03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fb17781d000 nid=0x5c03 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007fb176805000 nid=0x4603 in Object.wait() [0x00000001695a5000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:142)
	- locked <0x000000011e01cdd0> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:158)
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007fb176804000 nid=0x4403 in Object.wait() [0x00000001694a2000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)
	- locked <0x000000011e01f9b0> (a java.lang.ref.Reference$Lock)

"main" #1 prio=5 os_prio=31 tid=0x00007fb175800000 nid=0x1d03 in Object.wait() [0x000000010e869000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x000000011e071998> (a java.lang.Thread)
	at java.lang.Thread.join(Thread.java:1244)
	- locked <0x000000011e071998> (a java.lang.Thread)
	at java.lang.Thread.join(Thread.java:1318)
	at com.sun.javatest.regtest.MainWrapper.main(MainWrapper.java:71)
Comments
During forward-port of JDK-7189350 EDT.doDispatch was not taken into account when calling EventQueue.detachDispatchThread(). As a result a harmful optimization of this method occurred. So when doDispatch became false, no more events in QventQueue were handled before EDT shutdown. I kept the optimization but added the check to EDT.pumpEventsForFilter() that EventQueue is not empty to keep pumping.
28-01-2014