-
Bug
-
Resolution: Fixed
-
P4
-
6u29
-
b23
-
x86
-
linux_ubuntu
-
Not verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2219760 | 7u4 | Weijun Wang | P4 | Closed | Fixed | b10 |
FULL PRODUCT VERSION :
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Linux vivek-laptop 2.6.32-26-generic #48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010 i686 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
The program as below:
--------------------------------------------------
import sun.security.krb5.internal.rcache.*;
import sun.security.krb5.internal.*;
import java.util.*;
public class KTest2 {
public static void main(String [] a) throws Exception{
final CacheTable ct = new CacheTable();
final long time = System.currentTimeMillis();
ct.put("TheOnlyOne", new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time);
final ReplayCache rc = (ReplayCache) ct.get("TheOnlyOne");
new Thread() {
public void run() {
rc.put(new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time + 300*1000);
}
}.start();
ct.put("TheOnlyOne", new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time);
}
}
--------------------------------------------------
When compiles as in: javac KTest2.java
and executed as in: java KTest2
can deadlock the hosting JVM as is reproduced by the stack-trace dump, below:
-------------------------------------------------
Found one Java-level deadlock:
=============================
"Thread-0":
waiting to lock monitor 0x0921d720 (object 0xa5621b80, a sun.security.krb5.internal.rcache.CacheTable),
which is held by "main"
"main":
waiting to lock monitor 0x0921caa0 (object 0xa5622fb8, a sun.security.krb5.internal.rcache.ReplayCache),
which is held by "Thread-0"
Java stack information for the threads listed above:
===================================================
"Thread-0":
at java.util.Hashtable.remove(Hashtable.java:435)
- waiting to lock <0xa5621b80> (a sun.security.krb5.internal.rcache.CacheTable)
at sun.security.krb5.internal.rcache.ReplayCache.put(ReplayCache.java:123)
- locked <0xa5622fb8> (a sun.security.krb5.internal.rcache.ReplayCache)
at KTest2$1.run(KTest2.java:13)
"main":
at sun.security.krb5.internal.rcache.ReplayCache.put(ReplayCache.java:62)
- waiting to lock <0xa5622fb8> (a sun.security.krb5.internal.rcache.ReplayCache)
at sun.security.krb5.internal.rcache.CacheTable.put(CacheTable.java:59)
- locked <0xa5621b80> (a sun.security.krb5.internal.rcache.CacheTable)
at KTest2.main(KTest2.java:16)
Found 1 deadlock.
Heap
def new generation total 3456K, used 347K [0xa55f0000, 0xa59b0000, 0xa91f0000)
eden space 3072K, 11% used [0xa55f0000, 0xa5646dd0, 0xa58f0000)
from space 384K, 0% used [0xa58f0000, 0xa58f0000, 0xa5950000)
to space 384K, 0% used [0xa5950000, 0xa5950000, 0xa59b0000)
tenured generation total 7680K, used 0K [0xa91f0000, 0xa9970000, 0xb09f0000)
the space 7680K, 0% used [0xa91f0000, 0xa91f0000, 0xa91f0200, 0xa9970000)
compacting perm gen total 12288K, used 1829K [0xb09f0000, 0xb15f0000, 0xb49f0000)
the space 12288K, 14% used [0xb09f0000, 0xb0bb9600, 0xb0bb9600, 0xb15f0000)
No shared spaces configured
-------------------------------------------------
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
On my lap-top that is a pentium-box, this deadlock does not as readily happen,
as much as on my friends core-duo box.
But I have produced this interleaving using jdb to control the progress
of the two threads involved, to produce the stack-trace as reproduced
above.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The program could run to completion if it were not to deadlock.
As a Java-user, I would desire that the JVM *always* select the interleaving that would lead the program to its completion.
ACTUAL -
Found one Java-level deadlock:
=============================
"Thread-0":
waiting to lock monitor 0x0921d720 (object 0xa5621b80, a sun.security.krb5.internal.rcache.CacheTable),
which is held by "main"
"main":
waiting to lock monitor 0x0921caa0 (object 0xa5622fb8, a sun.security.krb5.internal.rcache.ReplayCache),
which is held by "Thread-0"
Java stack information for the threads listed above:
===================================================
"Thread-0":
at java.util.Hashtable.remove(Hashtable.java:435)
- waiting to lock <0xa5621b80> (a sun.security.krb5.internal.rcache.CacheTable)
at sun.security.krb5.internal.rcache.ReplayCache.put(ReplayCache.java:123)
- locked <0xa5622fb8> (a sun.security.krb5.internal.rcache.ReplayCache)
at KTest2$1.run(KTest2.java:13)
"main":
at sun.security.krb5.internal.rcache.ReplayCache.put(ReplayCache.java:62)
- waiting to lock <0xa5622fb8> (a sun.security.krb5.internal.rcache.ReplayCache)
at sun.security.krb5.internal.rcache.CacheTable.put(CacheTable.java:59)
- locked <0xa5621b80> (a sun.security.krb5.internal.rcache.CacheTable)
at KTest2.main(KTest2.java:16)
Found 1 deadlock.
Heap
def new generation total 3456K, used 347K [0xa55f0000, 0xa59b0000, 0xa91f0000)
eden space 3072K, 11% used [0xa55f0000, 0xa5646dd0, 0xa58f0000)
from space 384K, 0% used [0xa58f0000, 0xa58f0000, 0xa5950000)
to space 384K, 0% used [0xa5950000, 0xa5950000, 0xa59b0000)
tenured generation total 7680K, used 0K [0xa91f0000, 0xa9970000, 0xb09f0000)
the space 7680K, 0% used [0xa91f0000, 0xa91f0000, 0xa91f0200, 0xa9970000)
compacting perm gen total 12288K, used 1829K [0xb09f0000, 0xb15f0000, 0xb49f0000)
the space 12288K, 14% used [0xb09f0000, 0xb0bb9600, 0xb0bb9600, 0xb15f0000)
No shared spaces configured.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
The screen-dump above reports the details of the deadlock reached !
REPRODUCIBILITY :
This bug can be reproduced occasionally.
---------- BEGIN SOURCE ----------
import sun.security.krb5.internal.rcache.*;
import sun.security.krb5.internal.*;
import java.util.*;
public class KTest2 {
public static void main(String [] a) throws Exception{
final CacheTable ct = new CacheTable();
final long time = System.currentTimeMillis();
ct.put("TheOnlyOne", new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time);
final ReplayCache rc = (ReplayCache) ct.get("TheOnlyOne");
new Thread() {
public void run() {
rc.put(new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time + 300*1000);
}
}.start();
ct.put("TheOnlyOne", new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Hope for the best, and if not successful, try again !!
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Linux vivek-laptop 2.6.32-26-generic #48-Ubuntu SMP Wed Nov 24 09:00:03 UTC 2010 i686 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
The program as below:
--------------------------------------------------
import sun.security.krb5.internal.rcache.*;
import sun.security.krb5.internal.*;
import java.util.*;
public class KTest2 {
public static void main(String [] a) throws Exception{
final CacheTable ct = new CacheTable();
final long time = System.currentTimeMillis();
ct.put("TheOnlyOne", new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time);
final ReplayCache rc = (ReplayCache) ct.get("TheOnlyOne");
new Thread() {
public void run() {
rc.put(new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time + 300*1000);
}
}.start();
ct.put("TheOnlyOne", new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time);
}
}
--------------------------------------------------
When compiles as in: javac KTest2.java
and executed as in: java KTest2
can deadlock the hosting JVM as is reproduced by the stack-trace dump, below:
-------------------------------------------------
Found one Java-level deadlock:
=============================
"Thread-0":
waiting to lock monitor 0x0921d720 (object 0xa5621b80, a sun.security.krb5.internal.rcache.CacheTable),
which is held by "main"
"main":
waiting to lock monitor 0x0921caa0 (object 0xa5622fb8, a sun.security.krb5.internal.rcache.ReplayCache),
which is held by "Thread-0"
Java stack information for the threads listed above:
===================================================
"Thread-0":
at java.util.Hashtable.remove(Hashtable.java:435)
- waiting to lock <0xa5621b80> (a sun.security.krb5.internal.rcache.CacheTable)
at sun.security.krb5.internal.rcache.ReplayCache.put(ReplayCache.java:123)
- locked <0xa5622fb8> (a sun.security.krb5.internal.rcache.ReplayCache)
at KTest2$1.run(KTest2.java:13)
"main":
at sun.security.krb5.internal.rcache.ReplayCache.put(ReplayCache.java:62)
- waiting to lock <0xa5622fb8> (a sun.security.krb5.internal.rcache.ReplayCache)
at sun.security.krb5.internal.rcache.CacheTable.put(CacheTable.java:59)
- locked <0xa5621b80> (a sun.security.krb5.internal.rcache.CacheTable)
at KTest2.main(KTest2.java:16)
Found 1 deadlock.
Heap
def new generation total 3456K, used 347K [0xa55f0000, 0xa59b0000, 0xa91f0000)
eden space 3072K, 11% used [0xa55f0000, 0xa5646dd0, 0xa58f0000)
from space 384K, 0% used [0xa58f0000, 0xa58f0000, 0xa5950000)
to space 384K, 0% used [0xa5950000, 0xa5950000, 0xa59b0000)
tenured generation total 7680K, used 0K [0xa91f0000, 0xa9970000, 0xb09f0000)
the space 7680K, 0% used [0xa91f0000, 0xa91f0000, 0xa91f0200, 0xa9970000)
compacting perm gen total 12288K, used 1829K [0xb09f0000, 0xb15f0000, 0xb49f0000)
the space 12288K, 14% used [0xb09f0000, 0xb0bb9600, 0xb0bb9600, 0xb15f0000)
No shared spaces configured
-------------------------------------------------
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
On my lap-top that is a pentium-box, this deadlock does not as readily happen,
as much as on my friends core-duo box.
But I have produced this interleaving using jdb to control the progress
of the two threads involved, to produce the stack-trace as reproduced
above.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The program could run to completion if it were not to deadlock.
As a Java-user, I would desire that the JVM *always* select the interleaving that would lead the program to its completion.
ACTUAL -
Found one Java-level deadlock:
=============================
"Thread-0":
waiting to lock monitor 0x0921d720 (object 0xa5621b80, a sun.security.krb5.internal.rcache.CacheTable),
which is held by "main"
"main":
waiting to lock monitor 0x0921caa0 (object 0xa5622fb8, a sun.security.krb5.internal.rcache.ReplayCache),
which is held by "Thread-0"
Java stack information for the threads listed above:
===================================================
"Thread-0":
at java.util.Hashtable.remove(Hashtable.java:435)
- waiting to lock <0xa5621b80> (a sun.security.krb5.internal.rcache.CacheTable)
at sun.security.krb5.internal.rcache.ReplayCache.put(ReplayCache.java:123)
- locked <0xa5622fb8> (a sun.security.krb5.internal.rcache.ReplayCache)
at KTest2$1.run(KTest2.java:13)
"main":
at sun.security.krb5.internal.rcache.ReplayCache.put(ReplayCache.java:62)
- waiting to lock <0xa5622fb8> (a sun.security.krb5.internal.rcache.ReplayCache)
at sun.security.krb5.internal.rcache.CacheTable.put(CacheTable.java:59)
- locked <0xa5621b80> (a sun.security.krb5.internal.rcache.CacheTable)
at KTest2.main(KTest2.java:16)
Found 1 deadlock.
Heap
def new generation total 3456K, used 347K [0xa55f0000, 0xa59b0000, 0xa91f0000)
eden space 3072K, 11% used [0xa55f0000, 0xa5646dd0, 0xa58f0000)
from space 384K, 0% used [0xa58f0000, 0xa58f0000, 0xa5950000)
to space 384K, 0% used [0xa5950000, 0xa5950000, 0xa59b0000)
tenured generation total 7680K, used 0K [0xa91f0000, 0xa9970000, 0xb09f0000)
the space 7680K, 0% used [0xa91f0000, 0xa91f0000, 0xa91f0200, 0xa9970000)
compacting perm gen total 12288K, used 1829K [0xb09f0000, 0xb15f0000, 0xb49f0000)
the space 12288K, 14% used [0xb09f0000, 0xb0bb9600, 0xb0bb9600, 0xb15f0000)
No shared spaces configured.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
The screen-dump above reports the details of the deadlock reached !
REPRODUCIBILITY :
This bug can be reproduced occasionally.
---------- BEGIN SOURCE ----------
import sun.security.krb5.internal.rcache.*;
import sun.security.krb5.internal.*;
import java.util.*;
public class KTest2 {
public static void main(String [] a) throws Exception{
final CacheTable ct = new CacheTable();
final long time = System.currentTimeMillis();
ct.put("TheOnlyOne", new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time);
final ReplayCache rc = (ReplayCache) ct.get("TheOnlyOne");
new Thread() {
public void run() {
rc.put(new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time + 300*1000);
}
}.start();
ct.put("TheOnlyOne", new AuthTime( time - Krb5.DEFAULT_ALLOWABLE_CLOCKSKEW * 1000L, 0), time);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Hope for the best, and if not successful, try again !!
- backported by
-
JDK-2219760 rcache deadlock
-
- Closed
-