Under 1.3.1_08 or lower on Linux 7.x and 8.x java threads occasionally
do not exit although they are completed. The corresponding LINUX proc
goes into zombie/defunct state hanging in waitFor:
"Thread-2" prio=1 tid=0x80c0608 nid=0x1cf waiting on monitor [0x4ad3f000..0x4ad3f86c]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:415)
at java.lang.UNIXProcess.waitFor(UNIXProcess.java:213)
at tester$TesterThread.run(tester.java:67)
at java.lang.Thread.run(Thread.java:479)
This is can lead to blocks if a program uses sysnchronized threads.
The problem is strictly reproducible with the attached testcase.
The problem is fixed with 1.4.2 and RedHat 9.0 with the new NPTL Thread
lib. The problem is clearly a LINUX problem. However, other JVM implementations
work around this LINUX bug. This problem is not reproducible with Solaris.
See comments for details.
do not exit although they are completed. The corresponding LINUX proc
goes into zombie/defunct state hanging in waitFor:
"Thread-2" prio=1 tid=0x80c0608 nid=0x1cf waiting on monitor [0x4ad3f000..0x4ad3f86c]
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:415)
at java.lang.UNIXProcess.waitFor(UNIXProcess.java:213)
at tester$TesterThread.run(tester.java:67)
at java.lang.Thread.run(Thread.java:479)
This is can lead to blocks if a program uses sysnchronized threads.
The problem is strictly reproducible with the attached testcase.
The problem is fixed with 1.4.2 and RedHat 9.0 with the new NPTL Thread
lib. The problem is clearly a LINUX problem. However, other JVM implementations
work around this LINUX bug. This problem is not reproducible with Solaris.
See comments for details.