JDK-8172554 : [macos] deadlock on JFXPanel startup
  • Type: Bug
  • Component: javafx
  • Sub-Component: swing
  • Affected Version: 8u112,9
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: os_x
  • Submitted: 2017-01-11
  • Updated: 2020-01-31
  • Resolved: 2017-02-06
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
8u152Fixed 9Fixed
Description
This is potentially reproducible with any Swing/JFXPanel app. I reproduce it in IDEA + Markdown plugin [1]

Steps:

1. Activate VoiceOver (Cmd+F5)
2. Run IDEA w/ Markdown plugin
3. Open any *.md file with JavaFX WebView as the viewer

It deadlocks [2]

Another way to reproduce:

1. Run IDEA w/ Markdown plugin
2. Open any *.md file with JavaFX WebView as the viewer
3. "In parallel" with the 2nd step nevigate intensively across the IDEA system menu. 

It deadlocks [3]

[1] https://plugins.jetbrains.com/idea/plugin/7793-markdown-support

[2]

2016-06-15 13:02:22
Full thread dump OpenJDK 64-Bit Server VM (25.76-b216 mixed mode):

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

"ApplicationImpl pooled thread 949" #3390 prio=4 os_prio=31 tid=0x00007f80b0fe8800 nid=0xe401b waiting on condition [0x000070000326a000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b71a9d8> (a java.util.concurrent.SynchronousQueue$TransferStack)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"ApplicationImpl pooled thread 948" #3389 prio=4 os_prio=31 tid=0x00007f80b2960000 nid=0xe6653 waiting on condition [0x0000700004cbc000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b71a9d8> (a java.util.concurrent.SynchronousQueue$TransferStack)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"ApplicationImpl pooled thread 945" #3386 prio=4 os_prio=31 tid=0x00007f80b0b2c000 nid=0xe61fb waiting on condition [0x00007000050c2000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b71a9d8> (a java.util.concurrent.SynchronousQueue$TransferStack)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Process I/O pool 550" #3384 prio=4 os_prio=31 tid=0x00007f80b141b000 nid=0xe472f waiting on condition [0x00007000042ad000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b033f50> (a java.util.concurrent.SynchronousQueue$TransferStack)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Process I/O pool 549" #3383 prio=4 os_prio=31 tid=0x00007f80ae8e4000 nid=0xe9247 waiting on condition [0x000070000369b000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b033f50> (a java.util.concurrent.SynchronousQueue$TransferStack)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Process I/O pool 548" #3382 prio=4 os_prio=31 tid=0x00007f80b0768000 nid=0xe5e2b waiting on condition [0x0000700003498000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b033f50> (a java.util.concurrent.SynchronousQueue$TransferStack)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"process reaper" #3381 daemon prio=10 os_prio=31 tid=0x00007f80aef0e000 nid=0xe7f07 waiting on condition [0x000070000016c000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074bfe0288> (a java.util.concurrent.SynchronousQueue$TransferStack)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Thread-23" #3376 daemon prio=6 os_prio=31 tid=0x00007f80b45a5000 nid=0xe9a03 waiting on condition [0x0000700005ed7000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007622cd350> (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.LinkedBlockingDeque.takeFirst(LinkedBlockingDeque.java:492)
    at com.sun.glass.ui.InvokeLaterDispatcher.run(InvokeLaterDispatcher.java:108)

"QuantumRenderer-0" #3374 daemon prio=6 os_prio=31 tid=0x00007f80b0937000 nid=0xe45eb waiting on condition [0x0000700005cd4000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007622cd3c8> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
    at java.lang.Thread.run(Thread.java:745)

"ApplicationImpl pooled thread 939" #3328 prio=4 os_prio=31 tid=0x00007f80b5c54000 nid=0xe368b waiting on condition [0x0000700004ab9000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b71a9d8> (a java.util.concurrent.SynchronousQueue$TransferStack)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Ignore indexing" #2637 daemon prio=5 os_prio=31 tid=0x00007f80b2a2f800 nid=0xbc123 waiting on condition [0x0000700006ae9000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074db06cb8> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"CMake check configuration" #2410 daemon prio=5 os_prio=31 tid=0x00007f80a977f000 nid=0xad21f waiting on condition [0x00007000052c5000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x0000000764707938> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Ignore indexing" #1630 daemon prio=5 os_prio=31 tid=0x00007f80b0799000 nid=0x79977 waiting on condition [0x00007000062dd000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007570ea0b8> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Netty threadDeathWatcher-2-1" #1489 daemon prio=1 os_prio=31 tid=0x00007f80b375e800 nid=0x71fbf waiting on condition [0x00007000056cb000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.$$YJP$$sleep(Native Method)
    at java.lang.Thread.sleep(Thread.java)
    at io.netty.util.ThreadDeathWatcher$Watcher.run(ThreadDeathWatcher.java:147)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:145)
    at java.lang.Thread.run(Thread.java:745)

"Ignore indexing" #398 daemon prio=5 os_prio=31 tid=0x00007f80b0185000 nid=0x2b533 waiting on condition [0x00007000054c8000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000075f996080> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Ignore indexing" #230 daemon prio=5 os_prio=31 tid=0x00007f80ad2ba000 nid=0x2011b waiting on condition [0x00007000044b0000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007584a0458> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Ignore indexing" #154 daemon prio=5 os_prio=31 tid=0x00007f80a9285800 nid=0x1a233 waiting on condition [0x00007000058ce000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x0000000759e15d20> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Ignore indexing" #50 daemon prio=5 os_prio=31 tid=0x00007f80ac4f3800 nid=0x1260b waiting on condition [0x00007000048b6000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074d6aaa68> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Ignore indexing" #48 daemon prio=5 os_prio=31 tid=0x00007f80ab815000 nid=0x10213 waiting on condition [0x0000700004ebf000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074c3527f8> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"TimerQueue" #41 daemon prio=5 os_prio=31 tid=0x00007f80ad2e0000 nid=0x10a33 waiting on condition [0x00007000046b3000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b6be140> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
    at java.util.concurrent.DelayQueue.take(DelayQueue.java:223)
    at javax.swing.TimerQueue.run(TimerQueue.java:171)
    at java.lang.Thread.run(Thread.java:745)

"BaseDataReader: error stream of fsnotifier" #36 prio=4 os_prio=31 tid=0x00007f80ad453000 nid=0x9607 runnable [0x0000700003ea6000]
   java.lang.Thread.State: RUNNABLE
    at java.io.FileInputStream.$$YJP$$readBytes(Native Method)
    at java.io.FileInputStream.readBytes(FileInputStream.java)
    at java.io.FileInputStream.read(FileInputStream.java:255)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    - locked <0x000000074b3c0080> (a java.lang.UNIXProcess$ProcessPipeInputStream)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    - locked <0x000000074b5663c8> (a com.intellij.util.io.BaseInputStreamReader)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.Reader.read(Reader.java:140)
    at com.intellij.util.io.BaseOutputReader.readAvailableBlocking(BaseOutputReader.java:135)
    at com.intellij.util.io.BaseDataReader.readAvailable(BaseDataReader.java:82)
    at com.intellij.util.io.BaseDataReader.doRun(BaseDataReader.java:160)
    at com.intellij.util.io.BaseDataReader$1.run(BaseDataReader.java:61)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"BaseDataReader: output stream of fsnotifier" #35 prio=4 os_prio=31 tid=0x00007f80ac5eb000 nid=0x1e07 runnable [0x0000700003ca4000]
   java.lang.Thread.State: RUNNABLE
    at java.io.FileInputStream.$$YJP$$readBytes(Native Method)
    at java.io.FileInputStream.readBytes(FileInputStream.java)
    at java.io.FileInputStream.read(FileInputStream.java:255)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    - locked <0x000000074b37ee00> (a java.lang.UNIXProcess$ProcessPipeInputStream)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    - locked <0x000000074b566308> (a com.intellij.util.io.BaseInputStreamReader)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.Reader.read(Reader.java:140)
    at com.intellij.util.io.BaseOutputReader.readAvailableBlocking(BaseOutputReader.java:135)
    at com.intellij.util.io.BaseDataReader.readAvailable(BaseDataReader.java:82)
    at com.intellij.util.io.BaseDataReader.doRun(BaseDataReader.java:160)
    at com.intellij.util.io.BaseDataReader$1.run(BaseDataReader.java:61)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"ProcessWaitFor: fsnotifier" #34 prio=4 os_prio=31 tid=0x00007f80abd57800 nid=0x9807 in Object.wait() [0x00007000017b7000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.$$YJP$$wait(Native Method)
    at java.lang.Object.wait(Object.java)
    at java.lang.Object.wait(Object.java:502)
    at java.lang.UNIXProcess.waitFor(UNIXProcess.java:396)
    - locked <0x000000074b37ee50> (a java.lang.UNIXProcess)
    at com.intellij.execution.process.ProcessWaitFor$1.run(ProcessWaitFor.java:50)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"YJPAgent-Telemetry" #32 daemon prio=5 os_prio=31 tid=0x00007f80abcdc800 nid=0x131b waiting on condition [0x0000700002c61000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.$$YJP$$sleep(Native Method)
    at java.lang.Thread.sleep(Thread.java)
    at com.yourkit.util.Util.sleep(Util.java:60)
    at com.yourkit.runtime.TelemetryThread.run(TelemetryThread.java:560)

"AWT-EventQueue-0 2016.2#CL-162.844.13 CLion, eap:true, os:Mac OS X 10.11.5, java-version:JetBrains s.r.o 1.8.0_76-release-b216" #31 prio=6 os_prio=31 tid=0x00007f80abbe1000 nid=0xf90b runnable [0x0000700003a9c000]
   java.lang.Thread.State: RUNNABLE
    at com.sun.glass.ui.mac.MacApplication.$$YJP$$_runLoop(Native Method)
    at com.sun.glass.ui.mac.MacApplication._runLoop(MacApplication.java)
    at com.sun.glass.ui.mac.MacApplication.runLoop(MacApplication.java:83)
    at com.sun.glass.ui.Application.run(Application.java:153)
    at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:257)
    at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211)
    at javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:215)
    - locked <0x0000000758043f28> (a java.lang.Class for javafx.embed.swing.JFXPanel)
    at javafx.embed.swing.JFXPanel.<init>(JFXPanel.java:230)
    at org.intellij.plugins.markdown.ui.preview.javafx.JFXPanelWrapper.<init>(JFXPanelWrapper.java:9)
    at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanel.<init>(JavaFxHtmlPanel.java:52)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanelProvider.createHtmlPanel(JavaFxHtmlPanelProvider.java:28)
    at org.intellij.plugins.markdown.ui.preview.MarkdownPreviewFileEditor.detachOldPanelAndCreateAndAttachNewOne(MarkdownPreviewFileEditor.java:311)
    at org.intellij.plugins.markdown.ui.preview.MarkdownPreviewFileEditor.<init>(MarkdownPreviewFileEditor.java:100)
    at org.intellij.plugins.markdown.ui.preview.MarkdownPreviewFileEditorProvider.createEditor(MarkdownPreviewFileEditorProvider.java:20)
    at org.intellij.plugins.markdown.ui.split.SplitTextEditorProvider$2.build(SplitTextEditorProvider.java:133)
    at org.intellij.plugins.markdown.ui.split.SplitTextEditorProvider$1.build(SplitTextEditorProvider.java:58)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.a(FileEditorManagerImpl.java:872)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$$Lambda$313/2008003803.run(Unknown Source)
    at com.intellij.util.ui.UIUtil.invokeAndWaitIfNeeded(UIUtil.java:2418)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl4(FileEditorManagerImpl.java:971)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl3(FileEditorManagerImpl.java:788)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.a(FileEditorManagerImpl.java:770)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$$Lambda$842/626971861.run(Unknown Source)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:122)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:100)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:86)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileImpl2(FileEditorManagerImpl.java:770)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openFileWithProviders(FileEditorManagerImpl.java:711)
    at com.intellij.openapi.fileEditor.ex.FileEditorManagerEx.openFile(FileEditorManagerEx.java:151)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.a(FileEditorManagerImpl.java:1151)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl$$Lambda$841/1630436917.run(Unknown Source)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:129)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:100)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:86)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openEditor(FileEditorManagerImpl.java:1149)
    at com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl.openTextEditor(FileEditorManagerImpl.java:1211)
    at com.intellij.ide.actions.OpenFileAction.openFile(OpenFileAction.java:133)
    at com.intellij.ide.actions.OpenFileAction.a(OpenFileAction.java:104)
    at com.intellij.ide.actions.OpenFileAction.a(OpenFileAction.java:66)
    at com.intellij.ide.actions.OpenFileAction$$Lambda$1372/1748977254.consume(Unknown Source)
    at com.intellij.openapi.fileChooser.ex.FileChooserDialogImpl.choose(FileChooserDialogImpl.java:163)
    at com.intellij.openapi.fileChooser.FileChooser.chooseFiles(FileChooser.java:111)
    at com.intellij.openapi.fileChooser.FileChooser.chooseFiles(FileChooser.java:89)
    at com.intellij.ide.actions.OpenFileAction.actionPerformed(OpenFileAction.java:58)
    at com.intellij.openapi.actionSystem.ex.ActionUtil$1.run(ActionUtil.java:197)
    at com.intellij.openapi.application.TransactionGuardImpl.a(TransactionGuardImpl.java:88)
    at com.intellij.openapi.application.TransactionGuardImpl.submitTransactionAndWait(TransactionGuardImpl.java:156)
    at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:211)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.a(ActionMenuItem.java:304)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter$$Lambda$897/1141158724.run(Unknown Source)
    at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:905)
    at com.intellij.openapi.wm.impl.IdeFocusManagerImpl.runOnOwnContext(IdeFocusManagerImpl.java:124)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$ActionTransmitter.actionPerformed(ActionMenuItem.java:284)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.a(ActionMenuItem.java:112)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem$$Lambda$895/1817696636.run(Unknown Source)
    at com.intellij.openapi.application.TransactionGuardImpl.a(TransactionGuardImpl.java:88)
    at com.intellij.openapi.application.TransactionGuardImpl.access$300(TransactionGuardImpl.java:40)
    at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:113)
    at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:123)
    at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:109)
    at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:112)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:308)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at com.apple.laf.ScreenMenuItemCheckbox.itemStateChanged(ScreenMenuItemCheckbox.java:193)
    at java.awt.CheckboxMenuItem.processItemEvent(CheckboxMenuItem.java:389)
    at java.awt.CheckboxMenuItem.processEvent(CheckboxMenuItem.java:357)
    at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:351)
    at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:339)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:761)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at com.intellij.ide.IdeEventQueue.i(IdeEventQueue.java:863)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:699)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:385)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

"Timer-0" #29 daemon prio=5 os_prio=31 tid=0x00007f80abbc1800 nid=0xf607 in Object.wait() [0x000070000389e000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.$$YJP$$wait(Native Method)
    at java.lang.Object.wait(Object.java)
    at java.lang.Object.wait(Object.java:502)
    at java.util.TimerThread.mainLoop(Timer.java:526)
    - locked <0x000000074bfdf508> (a java.util.TaskQueue)
    at java.util.TimerThread.run(Timer.java:505)

"process reaper" #25 daemon prio=10 os_prio=31 tid=0x00007f80a97e1800 nid=0xe813 runnable [0x0000700003295000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.UNIXProcess.$$YJP$$waitForProcessExit(Native Method)
    at java.lang.UNIXProcess.waitForProcessExit(UNIXProcess.java)
    at java.lang.UNIXProcess.lambda$initStreams$3(UNIXProcess.java:290)
    at java.lang.UNIXProcess$$Lambda$20/253414988.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Periodic tasks thread" #23 prio=5 os_prio=31 tid=0x00007f80a95bf800 nid=0xe447 waiting on condition [0x0000700003067000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000074b45be40> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
    at java.util.concurrent.DelayQueue.take(DelayQueue.java:223)
    at com.intellij.util.concurrency.AppDelayQueue$1.run(AppDelayQueue.java:42)
    at java.lang.Thread.run(Thread.java:745)

"Netty Builtin Server 1" #20 prio=5 os_prio=31 tid=0x00007f80a9539000 nid=0xe26f runnable [0x0000700002e64000]
   java.lang.Thread.State: RUNNABLE
    at sun.nio.ch.KQueueArrayWrapper.$$YJP$$kevent0(Native Method)
    at sun.nio.ch.KQueueArrayWrapper.kevent0(KQueueArrayWrapper.java)
    at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:198)
    at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:117)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
    - locked <0x000000074b0c6a40> (a io.netty.channel.nio.SelectedSelectionKeySet)
    - locked <0x000000074b0d9c28> (a java.util.Collections$UnmodifiableSet)
    - locked <0x000000074b0bbde0> (a sun.nio.ch.KQueueSelectorImpl)
    at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
    at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:638)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:324)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:742)
    at java.lang.Thread.run(Thread.java:745)

"DestroyJavaVM" #18 prio=5 os_prio=31 tid=0x00007f80a9894000 nid=0x2803 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Java2D Disposer" #16 daemon prio=10 os_prio=31 tid=0x00007f80a9e9b800 nid=0xdd0f in Object.wait() [0x0000700002a5e000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.$$YJP$$wait(Native Method)
    at java.lang.Object.wait(Object.java)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
    - locked <0x000000074b0f8368> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
    at sun.java2d.Disposer.run(Disposer.java:148)
    at java.lang.Thread.run(Thread.java:745)

"Java2D Queue Flusher" #15 daemon prio=10 os_prio=31 tid=0x00007f80a9dd1000 nid=0xce1f in Object.wait() [0x000070000285b000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.$$YJP$$wait(Native Method)
    at java.lang.Object.wait(Object.java)
    at sun.java2d.opengl.OGLRenderQueue$QueueFlusher.run(OGLRenderQueue.java:203)
    - locked <0x000000074b0f55a0> (a sun.java2d.opengl.OGLRenderQueue$QueueFlusher)

"AWT-Shutdown" #14 prio=5 os_prio=31 tid=0x00007f80a9cfd800 nid=0x810f in Object.wait() [0x00007000025d5000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.$$YJP$$wait(Native Method)
    at java.lang.Object.wait(Object.java)
    at java.lang.Object.wait(Object.java:502)
    at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:295)
    - locked <0x000000074b0f3d40> (a java.lang.Object)
    at java.lang.Thread.run(Thread.java:745)

"AWT-AppKit" #13 daemon prio=5 os_prio=31 tid=0x00007f80a9d19000 nid=0x160b runnable [0x00007fff5b128000]
   java.lang.Thread.State: RUNNABLE
    at sun.lwawt.macosx.LWCToolkit.$$YJP$$doAWTRunLoopImpl(Native Method)
    at sun.lwawt.macosx.LWCToolkit.doAWTRunLoopImpl(LWCToolkit.java)
    at sun.lwawt.macosx.LWCToolkit.doAWTRunLoop(LWCToolkit.java:826)
    at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:642)
    at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:581)
    at sun.lwawt.macosx.CAccessibility.invokeAndWait(CAccessibility.java:82)
    at sun.lwawt.macosx.CAccessibility.getAccessibleRole(CAccessibility.java:248)

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

"C1 CompilerThread1" #11 daemon prio=9 os_prio=31 tid=0x00007f80a99fb800 nid=0x5303 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

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

"YJPAgent-OOMESnapshotDetector" #9 daemon prio=10 os_prio=31 tid=0x00007f80a998a000 nid=0x4f03 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"YJPAgent-CPUSampler" #8 daemon prio=10 os_prio=31 tid=0x00007f80a996b800 nid=0x4d03 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"YJPAgent-RequestListener" #7 daemon prio=1 os_prio=31 tid=0x00007f80a991a800 nid=0x4b03 runnable [0x00007000019ba000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.$$YJP$$socketAccept(Native Method)
    at java.net.PlainSocketImpl.socketAccept(PlainSocketImpl.java)
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
    at java.net.ServerSocket.implAccept(ServerSocket.java:545)
    at java.net.ServerSocket.accept(ServerSocket.java:513)
    at com.yourkit.runtime.Core$4.run(Core.java:716)
    at java.lang.Thread.run(Thread.java:745)

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

"Surrogate Locker Thread (Concurrent GC)" #4 daemon prio=9 os_prio=31 tid=0x00007f80a98ec000 nid=0x4307 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007f80a9113000 nid=0x4103 in Object.wait() [0x00007000011ae000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.$$YJP$$wait(Native Method)
    at java.lang.Object.wait(Object.java)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
    - locked <0x000000074b2a8a60> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007f80a9066000 nid=0x3f03 in Object.wait() [0x0000700000fab000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.$$YJP$$wait(Native Method)
    at java.lang.Object.wait(Object.java)
    at java.lang.Object.wait(Object.java:502)
    at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
    - locked <0x000000074b2a8a90> (a java.lang.ref.Reference$Lock)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"VM Thread" os_prio=31 tid=0x00007f80a98d7800 nid=0x3d03 runnable

"Gang worker#0 (Parallel GC Threads)" os_prio=31 tid=0x00007f80a989f000 nid=0x3703 runnable

"Gang worker#1 (Parallel GC Threads)" os_prio=31 tid=0x00007f80a98a0000 nid=0x3903 runnable

"Concurrent Mark-Sweep GC Thread" os_prio=31 tid=0x00007f80a905c000 nid=0x3b03 runnable

"VM Periodic Task Thread" os_prio=31 tid=0x00007f80a99fe800 nid=0x5703 waiting on condition

JNI global references: 11519

--------------------------------------

[3]

2016-12-23 16:47:39
Full thread dump OpenJDK 64-Bit Server VM (25.71-b00 mixed mode):

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

"Thread-7" #139 daemon prio=5 os_prio=31 tid=0x00007ffb1ea5a800 nid=0x1a33f runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Disposer" #138 daemon prio=10 os_prio=31 tid=0x00007ffb1ef04800 nid=0x1b30b in Object.wait() [0x000070000c442000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
	- locked <0x00000007be00f868> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
	at com.sun.webkit.Disposer.run(Disposer.java:104)
	at java.lang.Thread.run(Thread.java:745)

"Thread-6" #137 daemon prio=6 os_prio=31 tid=0x00007ffb29ee0000 nid=0x1c963 in Object.wait() [0x000070000c1b6000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at com.sun.glass.ui.InvokeLaterDispatcher.run(InvokeLaterDispatcher.java:126)
	- locked <0x00000007bd6adcf8> (a java.lang.StringBuilder)

"QuantumRenderer-0" #135 daemon prio=6 os_prio=31 tid=0x00007ffb13f40000 nid=0x133c7 waiting on condition [0x000070000aa6e000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000007bd526498> (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.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
	at java.lang.Thread.run(Thread.java:745)

"ApplicationImpl pooled thread 4" #40 prio=4 os_prio=31 tid=0x00007ffb1e885800 nid=0x1370b waiting on condition [0x000070000ac74000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000007a007f7d0> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
	at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

"TimerQueue" #35 daemon prio=5 os_prio=31 tid=0x00007ffb1d0e1800 nid=0x12e1b waiting on condition [0x000070000a765000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000007a1d7b560> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
	at java.util.concurrent.DelayQueue.take(DelayQueue.java:223)
	at javax.swing.TimerQueue.run(TimerQueue.java:174)
	at java.lang.Thread.run(Thread.java:745)

"BaseDataReader: error stream of fsnotifier" #34 prio=4 os_prio=31 tid=0x00007ffb23a3a800 nid=0x11b1f runnable [0x000070000a661000]
   java.lang.Thread.State: RUNNABLE
	at java.io.FileInputStream.readBytes(Native Method)
	at java.io.FileInputStream.read(FileInputStream.java:255)
	at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
	- locked <0x00000007a068d180> (a java.lang.UNIXProcess$ProcessPipeInputStream)
	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
	- locked <0x00000007a068f458> (a com.intellij.util.io.BaseInputStreamReader)
	at java.io.InputStreamReader.read(InputStreamReader.java:184)
	at java.io.Reader.read(Reader.java:140)
	at com.intellij.util.io.BaseOutputReader.readAvailableBlocking(BaseOutputReader.java:137)
	at com.intellij.util.io.BaseDataReader.readAvailable(BaseDataReader.java:84)
	at com.intellij.util.io.BaseDataReader.doRun(BaseDataReader.java:162)
	at com.intellij.util.io.BaseDataReader$1.run(BaseDataReader.java:63)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

"BaseDataReader: output stream of fsnotifier" #33 prio=4 os_prio=31 tid=0x00007ffb23bc6800 nid=0x11f07 runnable [0x000070000a55f000]
   java.lang.Thread.State: RUNNABLE
	at java.io.FileInputStream.readBytes(Native Method)
	at java.io.FileInputStream.read(FileInputStream.java:255)
	at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
	- locked <0x00000007a066b1d0> (a java.lang.UNIXProcess$ProcessPipeInputStream)
	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
	- locked <0x00000007a06916b0> (a com.intellij.util.io.BaseInputStreamReader)
	at java.io.InputStreamReader.read(InputStreamReader.java:184)
	at java.io.Reader.read(Reader.java:140)
	at com.intellij.util.io.BaseOutputReader.readAvailableBlocking(BaseOutputReader.java:137)
	at com.intellij.util.io.BaseDataReader.readAvailable(BaseDataReader.java:84)
	at com.intellij.util.io.BaseDataReader.doRun(BaseDataReader.java:162)
	at com.intellij.util.io.BaseDataReader$1.run(BaseDataReader.java:63)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

"ProcessWaitFor: fsnotifier" #32 prio=4 os_prio=31 tid=0x00007ffb23bc5800 nid=0x11dc7 in Object.wait() [0x000070000a45c000]
   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.UNIXProcess.waitFor(UNIXProcess.java:395)
	- locked <0x00000007a0669130> (a java.lang.UNIXProcess)
	at com.intellij.execution.process.ProcessWaitFor$1.run(ProcessWaitFor.java:50)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

"AWT-EventQueue-0 2017.1#__BUILD_NUMBER__ RubyMine, eap:true, os:Mac OS X 10.12.1, java-version:JetBrains s.r.o 1.8.0-internal-tav_2016_06_30_15_25-b00" #31 prio=6 os_prio=31 tid=0x00007ffb1fb25000 nid=0x10e13 waiting on condition [0x000070000a357000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000007bd42f2a8> (a java.util.concurrent.CountDownLatch$Sync)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
	at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
	at javafx.embed.swing.JFXPanel.setScene(JFXPanel.java:277)
	at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanel.lambda$null$0(JavaFxHtmlPanel.java:89)
	at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanel$$Lambda$1472/1827915568.run(Unknown Source)
	at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanel$$Lambda$1357/1861865564.run(Unknown Source)
	at java.awt.EventQueue.unsafeNonblockingExecute(EventQueue.java:1349)
	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:498)
	at com.intellij.ide.IdeEventQueue.unsafeNonblockingExecute(IdeEventQueue.java:1201)
	at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanel.runFX(JavaFxHtmlPanel.java:106)
	at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanel.lambda$null$1(JavaFxHtmlPanel.java:87)
	at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanel$$Lambda$1445/1252765091.run(Unknown Source)
	at com.intellij.openapi.application.TransactionGuardImpl$6.run(TransactionGuardImpl.java:315)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:408)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:397)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:806)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:643)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:362)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

"Timer-0" #29 daemon prio=5 os_prio=31 tid=0x00007ffb1f4f7000 nid=0x10c2b in Object.wait() [0x000070000a256000]
   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.util.TimerThread.mainLoop(Timer.java:526)
	- locked <0x00000007a0fd90b8> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:505)

"ApplicationImpl pooled thread 2" #26 prio=4 os_prio=31 tid=0x00007ffb1ffc9000 nid=0x10503 waiting on condition [0x000070000a050000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000007a007f7d0> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
	at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:941)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

"process reaper" #25 daemon prio=10 os_prio=31 tid=0x00007ffb21eb2800 nid=0x10303 runnable [0x0000700009f4d000]
   java.lang.Thread.State: RUNNABLE
	at java.lang.UNIXProcess.waitForProcessExit(Native Method)
	at java.lang.UNIXProcess.lambda$initStreams$3(UNIXProcess.java:289)
	at java.lang.UNIXProcess$$Lambda$22/360136841.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

"Periodic tasks thread" #23 prio=5 os_prio=31 tid=0x00007ffb21722800 nid=0xff07 waiting on condition [0x0000700009e1f000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x00000007a008cc30> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
	at java.util.concurrent.DelayQueue.take(DelayQueue.java:223)
	at com.intellij.util.concurrency.AppDelayQueue$1.run(AppDelayQueue.java:42)
	at java.lang.Thread.run(Thread.java:745)

"Netty Builtin Server 2" #20 prio=5 os_prio=31 tid=0x00007ffb1ffbe000 nid=0xfd03 runnable [0x0000700009d1c000]
   java.lang.Thread.State: RUNNABLE
	at sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
	at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:198)
	at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:117)
	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
	- locked <0x00000007a00a2de0> (a io.netty.channel.nio.SelectedSelectionKeySet)
	- locked <0x00000007a00a4ed0> (a java.util.Collections$UnmodifiableSet)
	- locked <0x00000007a00a2d30> (a sun.nio.ch.KQueueSelectorImpl)
	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
	at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:759)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:400)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873)
	at java.lang.Thread.run(Thread.java:745)

"Netty Builtin Server 1" #19 prio=5 os_prio=31 tid=0x00007ffb1d02c000 nid=0xfb4b runnable [0x0000700009c19000]
   java.lang.Thread.State: RUNNABLE
	at sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
	at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:198)
	at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:117)
	at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
	- locked <0x00000007a00c8bb0> (a io.netty.channel.nio.SelectedSelectionKeySet)
	- locked <0x00000007a00cac80> (a java.util.Collections$UnmodifiableSet)
	- locked <0x00000007a00c8aa0> (a sun.nio.ch.KQueueSelectorImpl)
	at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
	at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:759)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:400)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873)
	at java.lang.Thread.run(Thread.java:745)

"DestroyJavaVM" #18 prio=5 os_prio=31 tid=0x00007ffb1f001800 nid=0x1c03 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Java2D Disposer" #16 daemon prio=10 os_prio=31 tid=0x00007ffb1fce6000 nid=0xf503 in Object.wait() [0x0000700009a13000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
	- locked <0x00000007a013a638> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
	at sun.java2d.Disposer.run(Disposer.java:148)
	at java.lang.Thread.run(Thread.java:745)

"Java2D Queue Flusher" #15 daemon prio=10 os_prio=31 tid=0x00007ffb2190b000 nid=0xea07 in Object.wait() [0x000070000988d000]
   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:203)
	- locked <0x00000007a00609c0> (a sun.java2d.opengl.OGLRenderQueue$QueueFlusher)

"AWT-Shutdown" #14 prio=5 os_prio=31 tid=0x00007ffb1fc4e800 nid=0x8227 in Object.wait() [0x00007000094fb000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:295)
	- locked <0x00000007a00847a8> (a java.lang.Object)
	at java.lang.Thread.run(Thread.java:745)

"JavaFX Application Thread" #13 daemon prio=5 os_prio=31 tid=0x00007ffb204be800 nid=0x307 runnable [0x00007fff58753000]
   java.lang.Thread.State: RUNNABLE
	at sun.lwawt.macosx.LWCToolkit.doAWTRunLoopImpl(Native Method)
	at sun.lwawt.macosx.LWCToolkit.doAWTRunLoop(LWCToolkit.java:851)
	at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:666)
	at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:631)
	at com.apple.laf.ScreenMenu.invokeMenuClosing(ScreenMenu.java:155)

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

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

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

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

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

"JDWP Command Reader" #7 daemon prio=10 os_prio=31 tid=0x00007ffb1d80d800 nid=0x4f03 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"JDWP Event Helper Thread" #6 daemon prio=10 os_prio=31 tid=0x00007ffb1d80c800 nid=0x4d03 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"JDWP Transport Listener: dt_socket" #5 daemon prio=10 os_prio=31 tid=0x00007ffb1e80a800 nid=0x4b03 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

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

"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007ffb1f032000 nid=0x3903 in Object.wait() [0x00007000089da000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
	- locked <0x00000007a00bd110> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007ffb1f02f800 nid=0x3703 in Object.wait() [0x00007000088d7000]
   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.tryHandlePending(Reference.java:191)
	- locked <0x00000007a00bd150> (a java.lang.ref.Reference$Lock)
	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"VM Thread" os_prio=31 tid=0x00007ffb1f02a800 nid=0x3503 runnable 

"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007ffb1f803800 nid=0x2503 runnable 

"GC task thread#1 (ParallelGC)" os_prio=31 tid=0x00007ffb1f804000 nid=0x2703 runnable 

"GC task thread#2 (ParallelGC)" os_prio=31 tid=0x00007ffb1f804800 nid=0x2903 runnable 

"GC task thread#3 (ParallelGC)" os_prio=31 tid=0x00007ffb1f805000 nid=0x2b03 runnable 

"GC task thread#4 (ParallelGC)" os_prio=31 tid=0x00007ffb1f806000 nid=0x2d03 runnable 

"GC task thread#5 (ParallelGC)" os_prio=31 tid=0x00007ffb1f806800 nid=0x2f03 runnable 

"GC task thread#6 (ParallelGC)" os_prio=31 tid=0x00007ffb1f807000 nid=0x3103 runnable 

"GC task thread#7 (ParallelGC)" os_prio=31 tid=0x00007ffb1f807800 nid=0x3303 runnable 

"VM Periodic Task Thread" os_prio=31 tid=0x00007ffb201d8000 nid=0x5b03 waiting on condition 

JNI global references: 82378
Comments
I tested the 8u backport and there are no issues with our testing environment. This is approved to push to FX 8u-dev for 8u.152
15-06-2017

Raising priority to P2 since this is a deadlock in a reasonably common startup case without a good application-level workaround.
15-06-2017

We will need to figure out how to deal with the fact that the boot JDK we use to build / test FX will not necessarily have the fix for JDK-6980209. Ideally there would be a way we could check at runtime whether the JDK we are running with has the fix for JDK-6980209 without explicitly checking a version number. If this is not possible we will need another solution.
18-02-2017

Kevin, the backport version is http://cr.openjdk.java.net/~ssadetsky/8172554/8u/webrev.00/. But before we need to backport JDK-6980209 as well.
15-02-2017

The problem you mentioned would only happen if someone were to try to concurrently create a JFXPanel on two threads, a background thread and the EDT. As we discussed in earlier comments, I would consider that an application bug (it seems unlikely that an application would make this mistake, though). An application that just uses "new JFXPanel()" on an arbitrary thread as a way to initialize FX will continue to work just fine with no problems regardless of the thread on which it is called.
06-02-2017

I will push this shortly. Given the nature of this bug, we will consider a backport to JDK 8. Semyon: Can you please prepare a webrev against 8u-dev and post a backport request?
06-02-2017

Ok, Kevin, I will prepare the backport patch. One extra comment. initFX() method is synchronized, if non-EDT thread enters into it and starts the platform it may block the EDT thread if another JFXPanel is created on it. I would recommend to construct JFXPanel on EDT only as any other Swing component.
06-02-2017

Changeset: 01023e38dcec Author: ssadetsky Date: 2017-02-06 09:17 -0800 URL: http://hg.openjdk.java.net/openjfx/9-dev/rt/rev/01023e38dcec 8172554: [macos] deadlock on JFXPanel startup Reviewed-by: kcr
06-02-2017

+1
06-02-2017

Thank you for review, Kevin. The next webrev includes all your points: http://cr.openjdk.java.net/~ssadetsky/8172554/webrev.04/
06-02-2017

Oddly enough, just adding the null check in teardown is sufficient to fix the failure, even if you leave the call as: if (frame != null) { SwingUtilities.invokeLater(frame::dispose); } [additional info] Maybe not so odd after all. With the existing code, the NPE is thrown in the test thread to the caller of teardown (JUnit) whereas with frame.dispose() moved inside a lambda that is passed to invokeLater, the NPE is thrown in the EDT and not propagated to the test thread. Anyway, the solution is the null check as shown above.
04-02-2017

I did a little more debugging, and I found that the teardown method is being called even though the "assumeTrue" fails, which I guess makes sense if you think about it. Given this, you should add a null check for frame in teardown (which is good practice anyway). Two more comments on the test and then I think it will be ready: 4. You have a whole lot of extra spaces between the name of the test and the opening curly brace. 5. Since you rely on the initial value of 'stop' I think it will be clearer to explicitly initialize it to 'false' in the declaration (and I don't think there is any need to set it at all in the teardown method).
04-02-2017

I have no idea why this would be the case, but if you replace the following in your teardown method: SwingUtilities.invokeLater(frame::dispose); with this: SwingUtilities.invokeLater(() -> frame.dispose()); then the assumeTrue in the setup method works. I suspect this is a bug in JUnit or gradle.
04-02-2017

One more issue. I ran this on Linux and it doesn't look like the assumeTrue is working properly in the @BeforeClass method: test.javafx.embed.swing.FXPanelTest > classMethod FAILED org.junit.internal.AssumptionViolatedException: got: <false>, expected: is <true> at org.junit.Assume.assumeThat(Assume.java:70) at org.junit.Assume.assumeTrue(Assume.java:39) at test.javafx.embed.swing.FXPanelTest.init(FXPanelTest.java:63) test.javafx.embed.swing.FXPanelTest > classMethod FAILED java.lang.NullPointerException at java.base/java.util.Objects.requireNonNull(Objects.java:221) at test.javafx.embed.swing.FXPanelTest.teardown(FXPanelTest.java:110)
04-02-2017

Actually, never mind about adding a second test for JFXPanel constructed off thread. We already have a launcher test that verifies we can still call "new JFXPanel()" on an arbitrary thread. That test still passes with your fix, so no problems there. The fix itself is fine. I have three comments on the test: 1. Please move it under test/robot so that it only runs with the "USE_ROBOT" property is set to true. 2. As mentioned above, I think JFXPanelTest would be a better name for the test class. 3. We try to avoid wildcard imports in our code, so could you expand the swing and awt imports? Thanks.
04-02-2017

No, I didn't mean to test the concurrent case. I was just thinking of a second test similar to your test case, but with the JFXPanel being constructed outside of SwingUtilities.invokeLater. Oh, and I would change the name from FXPanelTest to JFXPanelTest since the name of the class is JFXPanel.
03-02-2017

Do you mean add system test scenario where the JFXPanels are created concurrently? Or you mean some sort of unit testing for the JFXPanel constructor?
03-02-2017

Oh, right I see the test. The code change looks fine now. I will test it out. It would be good to have a second unit test that calls "new JFXPanel()" from the test thread to check the other path. I'll review in parallel.
03-02-2017

http://cr.openjdk.java.net/~ssadetsky/8172554/webrev.03/ Test was always in the fix.
03-02-2017

It might be better to move all of the new logic into initFX (which is synchronized, so you wouldn't need an atomic boolean), check whether it is already initialized, then if not, check whether it is on the EDT. Something like this, maybe? initFx() { if (fxInitialized) { runLater(() -> {}); // Note that this is probably not needed, but matches current behavior return; } if (on the EDT thread) { spin up a nested even loop to call platform startup } else { just call platform startup } fxInitialized = true } Also, we ought to consider adding unit tests (system tests) for this.
03-02-2017

Actually, that's a very good point about the secondary loop not being needed on the non-EDT thread. The question, though, is whether it would be harmful? As for multiple apps on the same JVM that isn't supported.
03-02-2017

But secondary loop is not needed on non-EDT thread, is it? What if user concurrently starts two apps on the same JVM: 1- FX app with FX init on main thread. 2. - Swing app that uses JFXPanel. Is that usage prohibited?
03-02-2017

>> concurrent calls to "new JFXPanel()" including the case of one on the EDT and one off the EDT this means a mistake in user code. I would better do not run FX initialization if "new JFXPanel()" is not called on EDT. This will protect us from the concurent initialization as well as from starting the secondary loop on non-EDT thread. But you didn't answer my first question, which was: >> But what if the Platform.startup() is run on non-EDT thread concurrently with JFXPanel construction on EDT? The latter seems much more probable because FX >> may be initialized explicitly in the user code and it may be called on any thread according to the spec.
03-02-2017

It will be a regression in behavior if you prohibit calling "new JFXPanel()" from off the EDT. Many JDK 8 applications use this (at our suggestion) as a way to initialize JavaFX since we have no public API. As to your other question, that would be an application bug: the only time an application should use Platform.startup is if they are not using one of the other means to start the FX platform (Application.launch, new JFXPanel, or new FXCanvas). I do agree that two concurrent calls to "new JFXPanel" could also be considered an application bug. However, I'm not sure that invalidates the suggestion to using the "is initialized" check. It seems clearer and allows for the cleanup of using the public Platform.startup instead of the non-public PlatformImpl.startup. Is there another reason to avoid doing it this way?
03-02-2017

You placed the fxInitialized boolean into JFXPanel. That can prevent initFx() from running concurrently if two JFXPanel panels are constructed at the same time on different threads, although, which unlikely happens in case of correctly written user code. But what if the Platform.startup() is run on non-EDT thread concurrently with JFXPanel construction on EDT? The latter seems much more probable because FX may be initialized explicitly in the user code and it may be called on any thread according to the spec. As for the exception. Not sure that catching an error makes sense because java may not recover after error. Anyway. Whether the following code is acceptable for you? ... secondaryLoop.enter(); if (th[0] instanceof RuntimeException) { throw (RuntimeException)th[0]; } else if (th[0] instanceof Error) { throw (Error)th[0]; } else if (th[0] != null) { throw new RuntimeException("FX initialize error", th[0]); }
02-02-2017

One more thing I noticed is that you catch and forward Exception but not Error from the thread that calls initFX. If you catch Throwable (or separately catch RuntimeException and Error) then you will be able to handle those as well.
02-02-2017

I guess I didn't explain well (and I was really mixing two things with my suggestion about using the public API). What I meant is that you could do something like the following, which would avoid the try/catch and be a bit cleaner (and is thread-safe, although apps shouldn't create a JFXPanel on a non-EDT thread anyway, much less create two of them concurrently on two different threads). private static final AtomicBoolean fxInitialized = new AtomicBoolean(false); public JFXPanel() { if (fxInitialized.getAndSet(true)) { // already initialized Platform.runLater(() -> {}); } else { // put the nested loop code / call to initFX here } } Separately, once you do that, there is an opportunity to use the public API for Platform.startup in place of the internal PlatformImpl.startup method. The only difference between those two methods is that the public method will throw an exception if you call it more than once. When we added the public method, I had considered going back to JFXPanel and making exactly this change, but it wasn't (and still isn't) that big of a deal. So this part of my suggestion is really just a little bit of nice cleanup to remove one more occurrence of calling an internal methods. This change really isn't important and probably led to the confusion.
02-02-2017

Yes, the AtomicBoolean will correctly handle two concurrent calls to "new JFXPanel()" including the case of one on the EDT and one off the EDT, so that's another reason for it being a good pattern. As for your second question, the above code to rethrow Error looks fine and matches what the FX Application launcher code (in LauncherImpl) does.
02-02-2017

Kevin, in which scope the atomic boolean could be created? FX initialization may be run not only from JFXPanel constructor. Please, clarify. Also, I see no benefits in replacing the finally{} block with runnable argument of the Platform.startup(). The final block seems much clearer.
01-02-2017

If we really can rely on the correct behavior of SecondaryLoop.exit being call before .enter, then that part of the fix is OK, but we should file a spec bug against AWT to clarify that so we aren't relying on undocumented behavior. I would like to do some testing to make sure that there are no issues with the context classloader or when running with a security manager. Also, since change affects all platforms, we need to run the tests on all of them. Also, it seems cleaner to use an atomic boolean for initialization so you don't have to do a try/catch -- that way there is no chance that two threads could each create a secondary loop. Oh, and if you do make this change to ensure that platform startup is only called once, you can use the public API: Platform.startup (not really important, though).
01-02-2017

http://cr.openjdk.java.net/~ssadetsky/8172554/webrev.02/
27-01-2017

We can rely on SecondaryLoop concurrent calls. JDK9 SecondaryLoop implementation is a thread safe and it is well tested. See JDK-6980209.
27-01-2017

1. I had the same question that Jim raised. It turns out to work when calling them out of order, and looking at the implementation I can see why it works, but I don���t think we should rely on unspecified behavior like this. You might try Jim���s suggestion. 2. initFx() ends up being a no-op when called more than once. It's fast enough that we don't care currently. Now that you are planning to spin up a secondary event loop you should only do the initialization once (the first JFXPanel that is constructed) so it won���t be a performance hit. 3. You need a try/catch/finally call around initFx, otherwise if an exception or error happens you will hang waiting for the secondary loop to exit. In the case of an exception or error you will need to capture it and rethrow it to the caller of the constructor.
27-01-2017

What stops the thread from running and triggering the secondaryLoop.exit() before the outer thread calls secondaryLoop.start()? Can they be called out of order? If this is really an issue then the start() on the new thread could be posted as an event so that the secondary thread is already running when it happens.
26-01-2017

Fixed the component to be javafx since it is not a bug in swing itself.
26-01-2017

I would like to propose a simple solution, do not block EDT while JFX is initialized: http://cr.openjdk.java.net/~ssadetsky/8172554/webrev.01/
26-01-2017

Yes, I applied the patch to GlassApplication.m. Seems the JavaRunLoopMode is not that magic as I thought. If you look at LWCToolkit.m, Java_sun_lwawt_macosx_LWCToolkit_doAWTRunLoopImpl, you'll see the processEvents flag. JNFRunLoop selectors can't be dispatched without explicit dequeuing of the related event (nextEventMatchingMask). So, it doesn't help w/o enabling the RunLoop to process events. Actually, I have a working solution for the problem, but I hoped there could be a simpler one. You can see it here: https://github.com/JetBrains/jdk8u_jdk/commit/a9dbb6990fac0c659297487a261ba9170e5fb3ad SunToolkit.unsafeNonblockingExecute(Runnable) is used in IDEA to wrap JFX-critical invocations prone to deadlock on OSX. The fix seems quite a hacky to me (that's why I hadn't proposed it) but you can probably make something better out of it. Or you can suggest an alternative solution. The evil, actually, comes from the fact that a11y & menu handling code use invokeAndWait on EDT. Changing this logic is not an easy thing to do though...
17-01-2017

By the way did you modify the patch when applying it to 8? MacApplication.m was renamed to GlassApplication.m in 9.
16-01-2017

I made FX to run in javaRunLoopMode as you proposed. Do you have any ideas why it did not work? I can also deadlock Ensemble8/SwingInterop on 9 by clicking its JTable cells quickly.
16-01-2017

Semyon, unfortunately, the suggested fix didn't work for me in jdk8 + IDEA + markdown. It deadlocks the same way.
16-01-2017

I didn't try to reproduce it in jdk9, but as the related logic hasn't changed I suppose the problem still exists. Semyon, thanks for the fix, I'll try it and will let you know the results.
13-01-2017

http://cr.openjdk.java.net/~ssadetsky/8172554/webrev.00/ Anton, can you confirm that the fix works for you?
13-01-2017

Ok
12-01-2017

Victor, I think what Anton means makes sense. Possible, I cannot reproduce the issue in 9 because its probability is very low. Switching Glass toolkit to JNFRunLoop will add FX dependency on JavaNativeFoundation SDK. If there will no objections we can do this.
12-01-2017

Pending info regarding JDK 9
12-01-2017

not a P2 to follow ILW rules
12-01-2017

I made a simple Swing app using JFXPanel with WebView. Activating VoiceOver works well except it doesn't read the WebView content only swing controls text is read. Anton, it would be nice to get instructions how to reproduce this issue in 9. --------- public class FXPanelTest { static WebEngine webEngine; static void load() { Platform.runLater(() -> { webEngine.loadContent("<html><head></head><body><h1>Test</h1>test</body></html>"); }); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> initSwing()); } static void initSwing() { JFrame frame = new JFrame("FX"); frame.setSize(600, 600); final JFXPanel fxPanel = new JFXPanel(); Button load = new Button("Load"); frame.getContentPane().add(load, BorderLayout.SOUTH); load.addActionListener((e) -> load()); frame.getContentPane().add(fxPanel); frame.setVisible(true); Platform.runLater(() -> initFX(fxPanel)); } private static void initFX(JFXPanel fxPanel) { WebView myWebView = new WebView(); webEngine = myWebView.getEngine(); Scene scene = new Scene(myWebView); fxPanel.setScene(scene); } }
12-01-2017

The issue is reproducible on JDK 8. Testing on JDK 9 is not possible. Intellij Idea is not compatible with JDK9.
12-01-2017

Semyon, please evaluate it. I'm not sure this is P2
11-01-2017

Raised to P2 as the issue may be a stopper for an app using JFXPanel on macOS.
11-01-2017

In both the cases above the cause is the same. JFX is starting up from EDT: "AWT-EventQueue-0 java.lang.Thread.State: RUNNABLE at com.sun.glass.ui.mac.MacApplication.$$YJP$$_runLoop(Native Method) at com.sun.glass.ui.mac.MacApplication._runLoop(MacApplication.java) at com.sun.glass.ui.mac.MacApplication.runLoop(MacApplication.java:83) at com.sun.glass.ui.Application.run(Application.java:153) at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:257) at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211) at javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:215) - locked <0x0000000758043f28> (a java.lang.Class for javafx.embed.swing.JFXPanel) at javafx.embed.swing.JFXPanel.<init>(JFXPanel.java:230) at org.intellij.plugins.markdown.ui.preview.javafx.JFXPanelWrapper.<init>(JFXPanelWrapper.java:9) at org.intellij.plugins.markdown.ui.preview.javafx.JavaFxHtmlPanel.<init>(JavaFxHtmlPanel.java:52) ... Delegating an invocation to AppKit thread while it's busy waiting for EDT: 1st case, VoiceOver: "AWT-AppKit" #13 daemon prio=5 os_prio=31 tid=0x00007f80a9d19000 nid=0x160b runnable [0x00007fff5b128000] java.lang.Thread.State: RUNNABLE at sun.lwawt.macosx.LWCToolkit.$$YJP$$doAWTRunLoopImpl(Native Method) at sun.lwawt.macosx.LWCToolkit.doAWTRunLoopImpl(LWCToolkit.java) at sun.lwawt.macosx.LWCToolkit.doAWTRunLoop(LWCToolkit.java:826) at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:642) at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:581) at sun.lwawt.macosx.CAccessibility.invokeAndWait(CAccessibility.java:82) at sun.lwawt.macosx.CAccessibility.getAccessibleRole(CAccessibility.java:248) 2nd case, Menu: "JavaFX Application Thread" #13 daemon prio=5 os_prio=31 tid=0x00007ffb204be800 nid=0x307 runnable [0x00007fff58753000] java.lang.Thread.State: RUNNABLE at sun.lwawt.macosx.LWCToolkit.doAWTRunLoopImpl(Native Method) at sun.lwawt.macosx.LWCToolkit.doAWTRunLoop(LWCToolkit.java:851) at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:666) at sun.lwawt.macosx.LWCToolkit.invokeAndWait(LWCToolkit.java:631) at com.apple.laf.ScreenMenu.invokeMenuClosing(ScreenMenu.java:155) LWCToolkit.invokeAndWait() runs AWTRunLoop with processEvents=false: /** * Method to run a nested run-loop. The nested loop is spinned in the javaRunLoop mode, so selectors sent * by [JNFRunLoop performOnMainThreadWaiting] are processed. * @param mediator a native pointer to the mediator object created by createAWTRunLoopMediator * @param processEvents if true - dispatches event while in the nested loop. Used in DnD. * Additional attention is needed when using this feature as we short-circuit normal event * processing which could break Appkit. * (One known example is when the window is resized with the mouse) * * if false - all events come after exit form the nested loop */ static void doAWTRunLoop(long mediator, boolean processEvents) At the same time, JFX MacApplication.m performs a selector not via JNFRunLoop, see Java_com_sun_glass_ui_mac_MacApplication__1runLoop: [glass performSelectorOnMainThread:@selector(runLoop:) withObject:glass waitUntilDone:[NSThread isMainThread]]; // wait for Cocoa to enter its UI runloop while ([glass started] == NO) { LOG(" waiting for [glass started]"); usleep(10000); } So the runLoop selector is stuck in the native queue, blocking EDT. Is that possible to utilise [JNFRunLoop performOnMainThread] in Glass? (In which case the issue should be retargeted to OpenJFX)
11-01-2017