-
Bug
-
Resolution: Not an Issue
-
P3
-
None
-
7u10
-
None
FULL PRODUCT VERSION :
java version " 1.7.0_10 "
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) Server VM (build 23.6-b04, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux ubuntu 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
just a plain pc-desk-top, running ubuntu.
A DESCRIPTION OF THE PROBLEM :
Use the program TimeZonePrintStreamDeadlock.java to firstly compile it using " /usr/local/share/jdk1.7.0_10/bin/javac TimeZonePrintStreamDeadlock.java " , and
then execute the generated classfiles uding jdb: the command line to be used is rather elaborate: " /usr/local/share/jdk1.7.0_10/bin/jdb -Xshare:off -Xint -Dsun.rmi.server.exceptionTrace=true -Dsun.rmi.log.useOld=true -Duser.timezone=GMT_TimbuckThree -Djava.rmi.server.logCalls=false -Djaxp.debug=true TimeZonePrintStreamDeadlock "
Moreover, In-order for this deadlock to become reachable as demonstrated below, one more action is necessary: Clobber the contents of the file: /usr/local/share/jdk1.7.0_10/jre/lib/zi/ZoneInfoMappings
BEFORE: od -c /usr/local/share/jdk1.7.0_10/jre/lib/zi/ZoneInfoMappings | head -n2 (would fetch)
0000000 j a v a z m \0 001 D \0 \f t z d a t
0000020 a 2 0 1 2 i \0 @ # 251 002 h
E t c
AFTER CLOBBERING: od -c /usr/local/share/jdk1.7.0_10/jre/lib/zi/ZoneInfoMappings | head -n2 (fetches)
0000000 r a v a z m \0 001 D \0 \f t z d a t
0000020 a 2 0 1 2 i \0 @ # 251 002 h
E t c
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
ceems@ubuntu:~/phd-new/thesis/last-minus/deadlocks$ /usr/local/share/jdk1.7.0_10/bin/javac TimeZonePrintStreamDeadlock.java
TimeZonePrintStreamDeadlock.java:36: warning: UnicastServerRef is internal proprietary API and may be removed in a future release
try { (new sun.rmi.server.UnicastServerRef (77)).dispatch (null, null); }
^
TimeZonePrintStreamDeadlock.java:43: warning: PackerImpl is internal proprietary API and may be removed in a future release
try { (new com.sun.java.util.jar.pack.PackerImpl()).pack ((java.util.jar.JarFile) null, null); }
^
2 warnings
ceems@ubuntu:~/phd-new/thesis/last-minus/deadlocks$ /usr/local/share/jdk1.7.0_10/bin/jdb -Xshare:off -Xint -Dsun.rmi.server.exceptionTrace=true -Dsun.rmi.log.useOld=true -Duser.timezone=GMT_TimbuckThree -Djava.rmi.server.logCalls=false -Djaxp.debug=true TimeZonePrintStreamDeadlock
Initializing jdb ...
> stop in sun.util.calendar.ZoneInfoFile.getZoneInfoMappings ()
Deferring breakpoint sun.util.calendar.ZoneInfoFile.getZoneInfoMappings().
It will be set after the class is loaded.
> stop in java.io.PrintStream.println (java.lang.String)
Deferring breakpoint java.io.PrintStream.println(java.lang.String).
It will be set after the class is loaded.
> run
run TimeZonePrintStreamDeadlock
Set uncaught java.lang.Throwable
Set deferred breakpoint java.io.PrintStream.println(java.lang.String)
Set deferred uncaught java.lang.Throwable
>
VM Started: Set deferred breakpoint sun.util.calendar.ZoneInfoFile.getZoneInfoMappings()
Breakpoint hit: " thread=Thread-1 " , sun.util.calendar.ZoneInfoFile.getZoneInfoMappings(), line=1,006 bci=0
Thread-1[1] threads
Group system:
(java.lang.ref.Reference$ReferenceHandler)0x150 Reference Handler cond. waiting
(java.lang.ref.Finalizer$FinalizerThread)0x14f Finalizer cond. waiting
(java.lang.Thread)0x14e Signal Dispatcher running
Group main:
(TimeZonePrintStreamDeadlock$1)0x176 Thread-0 running
(TimeZonePrintStreamDeadlock$2)0x177 Thread-1 running (at breakpoint)
(java.lang.Thread)0x178 DestroyJavaVM running
Thread-1[1] threadlocks
Monitor information for thread Thread-1:
Owned monitor: instance of java.lang.Class(reflected class=sun.util.calendar.ZoneInfo, id=467)
Owned monitor: instance of java.lang.Class(reflected class=java.util.TimeZone, id=466)
Not waiting for a monitor
Thread-1[1] cont
>
Breakpoint hit: " thread=Thread-1 " , java.io.PrintStream.println(), line=805 bci=0
Thread-1[1] threads
Group system:
(java.lang.ref.Reference$ReferenceHandler)0x150 Reference Handler cond. waiting
(java.lang.ref.Finalizer$FinalizerThread)0x14f Finalizer cond. waiting
(java.lang.Thread)0x14e Signal Dispatcher running
Group main:
(TimeZonePrintStreamDeadlock$1)0x176 Thread-0 running
(TimeZonePrintStreamDeadlock$2)0x177 Thread-1 running (at breakpoint)
(java.lang.Thread)0x178 DestroyJavaVM running
Thread-1[1] suspend 0x177
Thread-1[1] thread 0x176
Thread-0[1] stop in java.util.Date.normalize ()
Deferring breakpoint java.util.Date.normalize().
It will be set after the class is loaded.
Thread-0[1] cont
>
Set deferred breakpoint java.util.Date.normalize()
Breakpoint hit: " thread=Thread-0 " , java.util.Date.normalize(), line=1,191 bci=0
Thread-0[1] resume 0x177
Thread-0[1] cont
> ^\2013-02-05 06:00:55
Full thread dump Java HotSpot(TM) Server VM (23.6-b04 mixed mode):
[ ... ]
Found one Java-level deadlock:
=============================
" Thread-1 " :
waiting to lock monitor 0x7eb02b54 (object 0xa4a1f620, a java.io.PrintStream),
which is held by " Thread-0 "
" Thread-0 " :
waiting to lock monitor 0x7eb03770 (object 0xa4b4be70, a java.lang.Class),
which is held by " Thread-1 "
Java stack information for the threads listed above:
===================================================
" Thread-1 " :
at java.io.PrintStream.println(PrintStream.java:806)
- waiting to lock <0xa4a1f620> (a java.io.PrintStream)
at sun.util.calendar.ZoneInfoFile.getZoneInfoMappings(ZoneInfoFile.java:1023)
at sun.util.calendar.ZoneInfoFile.getZoneAliases(ZoneInfoFile.java:798)
at sun.util.calendar.ZoneInfo.getAliasTable(ZoneInfo.java:838)
- locked <0xa4b4bfa0> (a java.lang.Class for sun.util.calendar.ZoneInfo)
at sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:667)
at java.util.TimeZone.getTimeZone(TimeZone.java:571)
at java.util.TimeZone.setDefaultZone(TimeZone.java:668)
- locked <0xa4b4be70> (a java.lang.Class for java.util.TimeZone)
at java.util.TimeZone.getDefaultRef(TimeZone.java:635)
at java.util.TimeZone.getDefault(TimeZone.java:622)
at com.sun.java.util.jar.pack.PackerImpl.pack(PackerImpl.java:89)
at TimeZonePrintStreamDeadlock$2.run(TimeZonePrintStreamDeadlock.java:43)
" Thread-0 " :
at java.util.TimeZone.getDefaultInAppContext(TimeZone.java:734)
- waiting to lock <0xa4b4be70> (a java.lang.Class for java.util.TimeZone)
at java.util.TimeZone.getDefaultRef(TimeZone.java:630)
at java.util.Date.normalize(Date.java:1193)
at java.util.Date.toString(Date.java:1027)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at sun.rmi.server.UnicastServerRef.logCallException(UnicastServerRef.java:484)
- locked <0xa4a1f620> (a java.io.PrintStream)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at TimeZonePrintStreamDeadlock$1.run(TimeZonePrintStreamDeadlock.java:36)
Found 1 deadlock.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The program need-not deadlock (In the sence that there seems no good reason why the program should deadlock at all), ...
ACTUAL -
..., whereas unfortunately it does !!
And thankfully, quite close to 'as-predicted' by our analysis!!
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Found one Java-level deadlock:
=============================
" Thread-1 " :
waiting to lock monitor 0x7eb02b54 (object 0xa4a1f620, a java.io.PrintStream),
which is held by " Thread-0 "
" Thread-0 " :
waiting to lock monitor 0x7eb03770 (object 0xa4b4be70, a java.lang.Class),
which is held by " Thread-1 "
Java stack information for the threads listed above:
===================================================
" Thread-1 " :
at java.io.PrintStream.println(PrintStream.java:806)
- waiting to lock <0xa4a1f620> (a java.io.PrintStream)
at sun.util.calendar.ZoneInfoFile.getZoneInfoMappings(ZoneInfoFile.java:1023)
at sun.util.calendar.ZoneInfoFile.getZoneAliases(ZoneInfoFile.java:798)
at sun.util.calendar.ZoneInfo.getAliasTable(ZoneInfo.java:838)
- locked <0xa4b4bfa0> (a java.lang.Class for sun.util.calendar.ZoneInfo)
at sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:667)
at java.util.TimeZone.getTimeZone(TimeZone.java:571)
at java.util.TimeZone.setDefaultZone(TimeZone.java:668)
- locked <0xa4b4be70> (a java.lang.Class for java.util.TimeZone)
at java.util.TimeZone.getDefaultRef(TimeZone.java:635)
at java.util.TimeZone.getDefault(TimeZone.java:622)
at com.sun.java.util.jar.pack.PackerImpl.pack(PackerImpl.java:89)
at TimeZonePrintStreamDeadlock$2.run(TimeZonePrintStreamDeadlock.java:43)
" Thread-0 " :
at java.util.TimeZone.getDefaultInAppContext(TimeZone.java:734)
- waiting to lock <0xa4b4be70> (a java.lang.Class for java.util.TimeZone)
at java.util.TimeZone.getDefaultRef(TimeZone.java:630)
at java.util.Date.normalize(Date.java:1193)
at java.util.Date.toString(Date.java:1027)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at sun.rmi.server.UnicastServerRef.logCallException(UnicastServerRef.java:484)
- locked <0xa4a1f620> (a java.io.PrintStream)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at TimeZonePrintStreamDeadlock$1.run(TimeZonePrintStreamDeadlock.java:36)
Found 1 deadlock.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
ceems@ubuntu:~/phd-new/thesis/last-minus/deadlocks$ cat TimeZonePrintStreamDeadlock.java
/* Deadlock as predicted by our analysis
* <Cycle-2 locks= " java.util.TimeZone.class java.io.PrintStream " >
* <Thread-1>
* com.sun.java.util.jar.pack.PackerImpl.pack:(Ljava/util/jar/JarFile;Ljava/io/OutputStream;)V
* <java.util.TimeZone.class>java.util.TimeZone.getTimeZone:(Ljava/lang/String;)Ljava/util/TimeZone;
* java.util.TimeZone.getTimeZone:(Ljava/lang/String;Z)Ljava/util/TimeZone;
* java.util.TimeZone.parseCustomTimeZone:(Ljava/lang/String;)Ljava/util/TimeZone;
* sun.util.calendar.ZoneInfoFile.getZoneInfo:(Ljava/lang/String;)Lsun/util/calendar/ZoneInfo;
* sun.util.calendar.ZoneInfoFile.createZoneInfo:(Ljava/lang/String;)Lsun/util/calendar/ZoneInfo;
* sun.util.calendar.ZoneInfoFile.readZoneInfoFile:(Ljava/lang/String;)[B
* java.io.PrintStream.println:(Ljava/lang/String;)V
* java.io.PrintStream
* <java.io.PrintStream>java.io.PrintStream.println:(Ljava/lang/String;)V#Ljava/io/PrintStream;#0
* =VarientOf=java.io.PrintStream.println:(Ljava/lang/String;)V
* </Thread-1>
* <Thread-2>
* sun.rmi.server.UnicastServerRef.oldDispatch:(Ljava/rmi/Remote;Ljava/rmi/server/RemoteCall;I)V
* sun.rmi.server.UnicastServerRef.logCallException:(Ljava/lang/Throwable;)V
* <java.io.PrintStream>sun.rmi.server.UnicastServerRef.logCallException:(Ljava/lang/Throwable;)V#Ljava/io/PrintStream;#0
* =VarientOf=sun.rmi.server.UnicastServerRef.logCallException:(Ljava/lang/Throwable;)V
* java.lang.StringBuilder.append:(Ljava/util/Date;)Ljava/lang/StringBuilder;
* =THROandVarientOf=java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
* java.lang.String.valueOf:(Ljava/util/Date;)Ljava/lang/String;=THROandVarientOf=java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
* java.util.Date.toString:()Ljava/lang/String;
* java.util.Date.normalize:()Lsun/util/calendar/BaseCalendar$Date;
* java.util.Date.normalize:(Lsun/util/calendar/BaseCalendar$Date;)Lsun/util/calendar/BaseCalendar$Date;
* java.util.TimeZone.class
* <java.util.TimeZone.class>java.util.TimeZone.getTimeZone:(Ljava/lang/String;)Ljava/util/TimeZone;
* </Thread-2>
*/
public class TimeZonePrintStreamDeadlock {
public static void main(String[] args) {
new Thread() {
public void run() {
try { (new sun.rmi.server.UnicastServerRef (77)).dispatch (null, null); }
catch (java.io.IOException e)
{ System.out.println ( " Exception thrown: " + e); };
};
}.start();
new Thread() {
public void run() {
try { (new com.sun.java.util.jar.pack.PackerImpl()).pack ((java.util.jar.JarFile) null, null); }
catch (java.io.IOException e)
{ System.out.println ( " Exception thrown: " + e); };
};
}.start();
}
}
ceems@ubuntu:~/phd-new/thesis/last-minus/deadlocks$
---------- END SOURCE ----------
java version " 1.7.0_10 "
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) Server VM (build 23.6-b04, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux ubuntu 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux
EXTRA RELEVANT SYSTEM CONFIGURATION :
just a plain pc-desk-top, running ubuntu.
A DESCRIPTION OF THE PROBLEM :
Use the program TimeZonePrintStreamDeadlock.java to firstly compile it using " /usr/local/share/jdk1.7.0_10/bin/javac TimeZonePrintStreamDeadlock.java " , and
then execute the generated classfiles uding jdb: the command line to be used is rather elaborate: " /usr/local/share/jdk1.7.0_10/bin/jdb -Xshare:off -Xint -Dsun.rmi.server.exceptionTrace=true -Dsun.rmi.log.useOld=true -Duser.timezone=GMT_TimbuckThree -Djava.rmi.server.logCalls=false -Djaxp.debug=true TimeZonePrintStreamDeadlock "
Moreover, In-order for this deadlock to become reachable as demonstrated below, one more action is necessary: Clobber the contents of the file: /usr/local/share/jdk1.7.0_10/jre/lib/zi/ZoneInfoMappings
BEFORE: od -c /usr/local/share/jdk1.7.0_10/jre/lib/zi/ZoneInfoMappings | head -n2 (would fetch)
0000000 j a v a z m \0 001 D \0 \f t z d a t
0000020 a 2 0 1 2 i \0 @ # 251 002 h
E t c
AFTER CLOBBERING: od -c /usr/local/share/jdk1.7.0_10/jre/lib/zi/ZoneInfoMappings | head -n2 (fetches)
0000000 r a v a z m \0 001 D \0 \f t z d a t
0000020 a 2 0 1 2 i \0 @ # 251 002 h
E t c
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
ceems@ubuntu:~/phd-new/thesis/last-minus/deadlocks$ /usr/local/share/jdk1.7.0_10/bin/javac TimeZonePrintStreamDeadlock.java
TimeZonePrintStreamDeadlock.java:36: warning: UnicastServerRef is internal proprietary API and may be removed in a future release
try { (new sun.rmi.server.UnicastServerRef (77)).dispatch (null, null); }
^
TimeZonePrintStreamDeadlock.java:43: warning: PackerImpl is internal proprietary API and may be removed in a future release
try { (new com.sun.java.util.jar.pack.PackerImpl()).pack ((java.util.jar.JarFile) null, null); }
^
2 warnings
ceems@ubuntu:~/phd-new/thesis/last-minus/deadlocks$ /usr/local/share/jdk1.7.0_10/bin/jdb -Xshare:off -Xint -Dsun.rmi.server.exceptionTrace=true -Dsun.rmi.log.useOld=true -Duser.timezone=GMT_TimbuckThree -Djava.rmi.server.logCalls=false -Djaxp.debug=true TimeZonePrintStreamDeadlock
Initializing jdb ...
> stop in sun.util.calendar.ZoneInfoFile.getZoneInfoMappings ()
Deferring breakpoint sun.util.calendar.ZoneInfoFile.getZoneInfoMappings().
It will be set after the class is loaded.
> stop in java.io.PrintStream.println (java.lang.String)
Deferring breakpoint java.io.PrintStream.println(java.lang.String).
It will be set after the class is loaded.
> run
run TimeZonePrintStreamDeadlock
Set uncaught java.lang.Throwable
Set deferred breakpoint java.io.PrintStream.println(java.lang.String)
Set deferred uncaught java.lang.Throwable
>
VM Started: Set deferred breakpoint sun.util.calendar.ZoneInfoFile.getZoneInfoMappings()
Breakpoint hit: " thread=Thread-1 " , sun.util.calendar.ZoneInfoFile.getZoneInfoMappings(), line=1,006 bci=0
Thread-1[1] threads
Group system:
(java.lang.ref.Reference$ReferenceHandler)0x150 Reference Handler cond. waiting
(java.lang.ref.Finalizer$FinalizerThread)0x14f Finalizer cond. waiting
(java.lang.Thread)0x14e Signal Dispatcher running
Group main:
(TimeZonePrintStreamDeadlock$1)0x176 Thread-0 running
(TimeZonePrintStreamDeadlock$2)0x177 Thread-1 running (at breakpoint)
(java.lang.Thread)0x178 DestroyJavaVM running
Thread-1[1] threadlocks
Monitor information for thread Thread-1:
Owned monitor: instance of java.lang.Class(reflected class=sun.util.calendar.ZoneInfo, id=467)
Owned monitor: instance of java.lang.Class(reflected class=java.util.TimeZone, id=466)
Not waiting for a monitor
Thread-1[1] cont
>
Breakpoint hit: " thread=Thread-1 " , java.io.PrintStream.println(), line=805 bci=0
Thread-1[1] threads
Group system:
(java.lang.ref.Reference$ReferenceHandler)0x150 Reference Handler cond. waiting
(java.lang.ref.Finalizer$FinalizerThread)0x14f Finalizer cond. waiting
(java.lang.Thread)0x14e Signal Dispatcher running
Group main:
(TimeZonePrintStreamDeadlock$1)0x176 Thread-0 running
(TimeZonePrintStreamDeadlock$2)0x177 Thread-1 running (at breakpoint)
(java.lang.Thread)0x178 DestroyJavaVM running
Thread-1[1] suspend 0x177
Thread-1[1] thread 0x176
Thread-0[1] stop in java.util.Date.normalize ()
Deferring breakpoint java.util.Date.normalize().
It will be set after the class is loaded.
Thread-0[1] cont
>
Set deferred breakpoint java.util.Date.normalize()
Breakpoint hit: " thread=Thread-0 " , java.util.Date.normalize(), line=1,191 bci=0
Thread-0[1] resume 0x177
Thread-0[1] cont
> ^\2013-02-05 06:00:55
Full thread dump Java HotSpot(TM) Server VM (23.6-b04 mixed mode):
[ ... ]
Found one Java-level deadlock:
=============================
" Thread-1 " :
waiting to lock monitor 0x7eb02b54 (object 0xa4a1f620, a java.io.PrintStream),
which is held by " Thread-0 "
" Thread-0 " :
waiting to lock monitor 0x7eb03770 (object 0xa4b4be70, a java.lang.Class),
which is held by " Thread-1 "
Java stack information for the threads listed above:
===================================================
" Thread-1 " :
at java.io.PrintStream.println(PrintStream.java:806)
- waiting to lock <0xa4a1f620> (a java.io.PrintStream)
at sun.util.calendar.ZoneInfoFile.getZoneInfoMappings(ZoneInfoFile.java:1023)
at sun.util.calendar.ZoneInfoFile.getZoneAliases(ZoneInfoFile.java:798)
at sun.util.calendar.ZoneInfo.getAliasTable(ZoneInfo.java:838)
- locked <0xa4b4bfa0> (a java.lang.Class for sun.util.calendar.ZoneInfo)
at sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:667)
at java.util.TimeZone.getTimeZone(TimeZone.java:571)
at java.util.TimeZone.setDefaultZone(TimeZone.java:668)
- locked <0xa4b4be70> (a java.lang.Class for java.util.TimeZone)
at java.util.TimeZone.getDefaultRef(TimeZone.java:635)
at java.util.TimeZone.getDefault(TimeZone.java:622)
at com.sun.java.util.jar.pack.PackerImpl.pack(PackerImpl.java:89)
at TimeZonePrintStreamDeadlock$2.run(TimeZonePrintStreamDeadlock.java:43)
" Thread-0 " :
at java.util.TimeZone.getDefaultInAppContext(TimeZone.java:734)
- waiting to lock <0xa4b4be70> (a java.lang.Class for java.util.TimeZone)
at java.util.TimeZone.getDefaultRef(TimeZone.java:630)
at java.util.Date.normalize(Date.java:1193)
at java.util.Date.toString(Date.java:1027)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at sun.rmi.server.UnicastServerRef.logCallException(UnicastServerRef.java:484)
- locked <0xa4a1f620> (a java.io.PrintStream)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at TimeZonePrintStreamDeadlock$1.run(TimeZonePrintStreamDeadlock.java:36)
Found 1 deadlock.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
The program need-not deadlock (In the sence that there seems no good reason why the program should deadlock at all), ...
ACTUAL -
..., whereas unfortunately it does !!
And thankfully, quite close to 'as-predicted' by our analysis!!
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Found one Java-level deadlock:
=============================
" Thread-1 " :
waiting to lock monitor 0x7eb02b54 (object 0xa4a1f620, a java.io.PrintStream),
which is held by " Thread-0 "
" Thread-0 " :
waiting to lock monitor 0x7eb03770 (object 0xa4b4be70, a java.lang.Class),
which is held by " Thread-1 "
Java stack information for the threads listed above:
===================================================
" Thread-1 " :
at java.io.PrintStream.println(PrintStream.java:806)
- waiting to lock <0xa4a1f620> (a java.io.PrintStream)
at sun.util.calendar.ZoneInfoFile.getZoneInfoMappings(ZoneInfoFile.java:1023)
at sun.util.calendar.ZoneInfoFile.getZoneAliases(ZoneInfoFile.java:798)
at sun.util.calendar.ZoneInfo.getAliasTable(ZoneInfo.java:838)
- locked <0xa4b4bfa0> (a java.lang.Class for sun.util.calendar.ZoneInfo)
at sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:667)
at java.util.TimeZone.getTimeZone(TimeZone.java:571)
at java.util.TimeZone.setDefaultZone(TimeZone.java:668)
- locked <0xa4b4be70> (a java.lang.Class for java.util.TimeZone)
at java.util.TimeZone.getDefaultRef(TimeZone.java:635)
at java.util.TimeZone.getDefault(TimeZone.java:622)
at com.sun.java.util.jar.pack.PackerImpl.pack(PackerImpl.java:89)
at TimeZonePrintStreamDeadlock$2.run(TimeZonePrintStreamDeadlock.java:43)
" Thread-0 " :
at java.util.TimeZone.getDefaultInAppContext(TimeZone.java:734)
- waiting to lock <0xa4b4be70> (a java.lang.Class for java.util.TimeZone)
at java.util.TimeZone.getDefaultRef(TimeZone.java:630)
at java.util.Date.normalize(Date.java:1193)
at java.util.Date.toString(Date.java:1027)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at sun.rmi.server.UnicastServerRef.logCallException(UnicastServerRef.java:484)
- locked <0xa4a1f620> (a java.io.PrintStream)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at TimeZonePrintStreamDeadlock$1.run(TimeZonePrintStreamDeadlock.java:36)
Found 1 deadlock.
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
ceems@ubuntu:~/phd-new/thesis/last-minus/deadlocks$ cat TimeZonePrintStreamDeadlock.java
/* Deadlock as predicted by our analysis
* <Cycle-2 locks= " java.util.TimeZone.class java.io.PrintStream " >
* <Thread-1>
* com.sun.java.util.jar.pack.PackerImpl.pack:(Ljava/util/jar/JarFile;Ljava/io/OutputStream;)V
* <java.util.TimeZone.class>java.util.TimeZone.getTimeZone:(Ljava/lang/String;)Ljava/util/TimeZone;
* java.util.TimeZone.getTimeZone:(Ljava/lang/String;Z)Ljava/util/TimeZone;
* java.util.TimeZone.parseCustomTimeZone:(Ljava/lang/String;)Ljava/util/TimeZone;
* sun.util.calendar.ZoneInfoFile.getZoneInfo:(Ljava/lang/String;)Lsun/util/calendar/ZoneInfo;
* sun.util.calendar.ZoneInfoFile.createZoneInfo:(Ljava/lang/String;)Lsun/util/calendar/ZoneInfo;
* sun.util.calendar.ZoneInfoFile.readZoneInfoFile:(Ljava/lang/String;)[B
* java.io.PrintStream.println:(Ljava/lang/String;)V
* java.io.PrintStream
* <java.io.PrintStream>java.io.PrintStream.println:(Ljava/lang/String;)V#Ljava/io/PrintStream;#0
* =VarientOf=java.io.PrintStream.println:(Ljava/lang/String;)V
* </Thread-1>
* <Thread-2>
* sun.rmi.server.UnicastServerRef.oldDispatch:(Ljava/rmi/Remote;Ljava/rmi/server/RemoteCall;I)V
* sun.rmi.server.UnicastServerRef.logCallException:(Ljava/lang/Throwable;)V
* <java.io.PrintStream>sun.rmi.server.UnicastServerRef.logCallException:(Ljava/lang/Throwable;)V#Ljava/io/PrintStream;#0
* =VarientOf=sun.rmi.server.UnicastServerRef.logCallException:(Ljava/lang/Throwable;)V
* java.lang.StringBuilder.append:(Ljava/util/Date;)Ljava/lang/StringBuilder;
* =THROandVarientOf=java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
* java.lang.String.valueOf:(Ljava/util/Date;)Ljava/lang/String;=THROandVarientOf=java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
* java.util.Date.toString:()Ljava/lang/String;
* java.util.Date.normalize:()Lsun/util/calendar/BaseCalendar$Date;
* java.util.Date.normalize:(Lsun/util/calendar/BaseCalendar$Date;)Lsun/util/calendar/BaseCalendar$Date;
* java.util.TimeZone.class
* <java.util.TimeZone.class>java.util.TimeZone.getTimeZone:(Ljava/lang/String;)Ljava/util/TimeZone;
* </Thread-2>
*/
public class TimeZonePrintStreamDeadlock {
public static void main(String[] args) {
new Thread() {
public void run() {
try { (new sun.rmi.server.UnicastServerRef (77)).dispatch (null, null); }
catch (java.io.IOException e)
{ System.out.println ( " Exception thrown: " + e); };
};
}.start();
new Thread() {
public void run() {
try { (new com.sun.java.util.jar.pack.PackerImpl()).pack ((java.util.jar.JarFile) null, null); }
catch (java.io.IOException e)
{ System.out.println ( " Exception thrown: " + e); };
};
}.start();
}
}
ceems@ubuntu:~/phd-new/thesis/last-minus/deadlocks$
---------- END SOURCE ----------
- duplicates
-
JDK-2230192 TimeZone.getDefault() slow due to synchronization bottleneck
-
- Resolved
-