<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
<tt>Let's try that again with the attachement...<br>
<br>
Resending and including the Runtime team since I think that team
<br>
owns deadlock detection support at this point...
<br>
<br>
Dan
<br>
</tt>
<br>
<br>
-------- Original Message --------
<table class="moz-email-headers-table" border="0" cellpadding="0"
 cellspacing="0">
  <tbody>
    <tr>
      <th align="right" nowrap="nowrap" valign="baseline">Subject: </th>
      <td>Deadlocked Thread State is RUNNABLE?</td>
    </tr>
    <tr>
      <th align="right" nowrap="nowrap" valign="baseline">Date: </th>
      <td>Tue, 17 Nov 2009 16:00:28 -0800</td>
    </tr>
    <tr>
      <th align="right" nowrap="nowrap" valign="baseline">From: </th>
      <td>Jeremy Manson <a class="moz-txt-link-rfc2396E" href="mailto:jeremymanson@google.com">&lt;jeremymanson@google.com&gt;</a></td>
    </tr>
    <tr>
      <th align="right" nowrap="nowrap" valign="baseline">To: </th>
      <td><a class="moz-txt-link-abbreviated" href="mailto:serviceability-dev@openjdk.java.net">serviceability-dev@openjdk.java.net</a></td>
    </tr>
  </tbody>
</table>
<br>
<br>
<pre>Hi folks,

I notice that when you send a sigquit to a VM, and threads are
deadlocked in class initialization, then the thread state is reported
as RUNNABLE.  Is this deliberate?

With the attached program (which mostly deadlocks on clinit - I don't
have the time to remember how to write the
100-percent-will-always-deadlock version today), here is the output
from JDK7 b74.

2009-11-17 15:41:14
Full thread dump OpenJDK Server VM (17.0-b03 mixed mode):

"DestroyJavaVM" prio=10 tid=0xaf519c00 nid=0x2221 waiting on condition
[0x00000000]
   java.lang.Thread.State: RUNNABLE

"Thread-1" prio=10 tid=0xaf518000 nid=0x2230 in Object.wait() [0xaf3db000]
   java.lang.Thread.State: RUNNABLE
        at NPE$2.run(NPE.java:60)
        at java.lang.Thread.run(Thread.java:717)

"Thread-0" prio=10 tid=0xaf516800 nid=0x222f in Object.wait() [0xaf42c000]
   java.lang.Thread.State: RUNNABLE
        at Base.&lt;clinit&gt;(NPE.java:33)
        at NPE$1.run(NPE.java:54)
        at java.lang.Thread.run(Thread.java:717)

"Low Memory Detector" daemon prio=10 tid=0xaf500c00 nid=0x222d
runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread1" daemon prio=10 tid=0x08109c00 nid=0x222c waiting on
condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread0" daemon prio=10 tid=0x08107800 nid=0x222b waiting on
condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x08105c00 nid=0x222a waiting
on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x080f6c00 nid=0x2229 in Object.wait()
[0xaf821000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0xecf30bd0&gt; (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
        - locked &lt;0xecf30bd0&gt; (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)

"Reference Handler" daemon prio=10 tid=0x080f2000 nid=0x2228 in
Object.wait() [0xaf872000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on &lt;0xecf30990&gt; (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:502)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
        - locked &lt;0xecf30990&gt; (a java.lang.ref.Reference$Lock)

"VM Thread" prio=10 tid=0x080ed400 nid=0x2227 runnable

"GC task thread#0 (ParallelGC)" prio=10 tid=0x08057400 nid=0x2222 runnable

"GC task thread#1 (ParallelGC)" prio=10 tid=0x08058c00 nid=0x2223 runnable

"GC task thread#2 (ParallelGC)" prio=10 tid=0x0805a000 nid=0x2224 runnable

"GC task thread#3 (ParallelGC)" prio=10 tid=0x0805b800 nid=0x2225 runnable

"VM Periodic Task Thread" prio=10 tid=0xaf502c00 nid=0x222e waiting on
condition

JNI global references: 643

Heap
 PSYoungGen      total 12480K, used 860K [0xecf30000, 0xedd10000, 0xf40f0000)
  eden space 10752K, 8% used [0xecf30000,0xed007148,0xed9b0000)
  from space 1728K, 0% used [0xedb60000,0xedb60000,0xedd10000)
  to   space 1728K, 0% used [0xed9b0000,0xed9b0000,0xedb60000)
 PSOldGen        total 113792K, used 0K [0xb40f0000, 0xbb010000, 0xecf30000)
  object space 113792K, 0% used [0xb40f0000,0xb40f0000,0xbb010000)
 PSPermGen       total 16384K, used 1764K [0xb00f0000, 0xb10f0000, 0xb40f0000)
  object space 16384K, 10% used [0xb00f0000,0xb02a91d0,0xb10f0000)

</pre>
</body>
</html>