[Ikvm-commit] ikvm/classpath/java/lang VMThread.java,1.32,1.33
Brought to you by:
jfrijters
From: Jeroen F. <jfr...@us...> - 2007-04-22 09:27:20
|
Update of /cvsroot/ikvm/ikvm/classpath/java/lang In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv32656 Modified Files: VMThread.java Log Message: Fixed potential deadlock when a dying thread is interrupted. Index: VMThread.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/classpath/java/lang/VMThread.java,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** VMThread.java 16 Apr 2007 06:06:33 -0000 1.32 --- VMThread.java 22 Apr 2007 09:27:17 -0000 1.33 *************** *** 102,116 **** // notify Thread that it is dead, this method can safely be called multiple times // used by inner class ! /*private*/ synchronized void cleanup() { ! if(thread.vmThread != null) ! { ! thread.die(); ! nativeThreadReference.set_Target(null); ! if(!thread.daemon) ! { ! nonDaemonCount.decrementAndGet(); ! } ! } } --- 102,124 ---- // notify Thread that it is dead, this method can safely be called multiple times // used by inner class ! /*private*/ void cleanup() { ! // since we're going to call back to Thread.die() (which is synchronized) ! // we must first acquire the Thread lock and then our own lock, to prevent deadlock. ! synchronized(thread) ! { ! synchronized(this) ! { ! if(thread.vmThread != null) ! { ! thread.die(); ! nativeThreadReference.set_Target(null); ! if(!thread.daemon) ! { ! nonDaemonCount.decrementAndGet(); ! } ! } ! } ! } } |