From: Vladimir T. <vtz...@gm...> - 2009-06-26 13:12:18
|
Sam, In xlock_unlock_helper(): - l->_owner = NULL; /* hmm */ + l->_owned = false; We need a way to invalidate the _owner, since it is used to be checked whether a thread holds the lock in xlock_lock_helper(). If thread owns a lock and unlocks it and after this locks it again - the second time xlock_lock_helper() will not really acquire the mutex since the _owner will be still the same (all this if _owner is not invalidated and there is no other thread that got the lock between meanwhile. I've experience exactly this with the tests that you've added for hash table and packages). NULL - rather non-standard is widely used for this purpose (or may be we can zero-up it with memset() in order to avoid compiler warnings). Vladimir |