You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2006/11/30 18:45:19 UTC
svn commit: r481009 -
/harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_thin_monitor.c
Author: gshimansky
Date: Thu Nov 30 09:45:13 2006
New Revision: 481009
URL: http://svn.apache.org/viewvc?view=rev&rev=481009
Log:
Fixed an incorrect assertion in theading, added a big comment why
it wasn't correct.
Modified:
harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_thin_monitor.c
Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_thin_monitor.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_thin_monitor.c?view=diff&rev=481009&r1=481008&r2=481009
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_thin_monitor.c (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/thread_native_thin_monitor.c Thu Nov 30 09:45:13 2006
@@ -197,8 +197,18 @@
hythread_resume(owner);
}
- /* status = hymutex_unlock(TM_LOCK);*/
- assert(!IS_RESERVED(*lockword_ptr));
+ /* status = hymutex_unlock(TM_LOCK);*/
+
+ // Gregory - This lock, right after it was unreserved, may be
+ // inflated by another thread and therefore instead of recursion
+ // count and reserved flag it will have the fat monitor ID. The
+ // assertion !IS_RESERVED(lockword) fails in this case. So it is
+ // necessary to check first that monitor is not fat.
+ // To avoid race condition between checking two different
+ // conditions inside of assert, the lockword contents has to be
+ // loaded before checking.
+ lockword = *lockword_ptr;
+ assert(IS_FAT_LOCK(lockword) || !IS_RESERVED(lockword));
return TM_ERROR_NONE;
}
#else