On 11/19/10 01:50, Johnny Billquist wrote:
mutex exit spin with unlock appears to totally have been because some spin locks were managed to be taken though mutex_vector_enter, even though I have a mutex_spin_enter. I have no idea how on earth that path would be possible, but after changing the code that takes spin locks in mutex_vector_enter to match the code I have in mutex_spin_enter, that counter is now zero.
Doh! Stupid of me. I just realized how mutexes can be taken without ever passing through mutex_enter or mutex_vector_enter, even if they are defined. We also have mutex_tryenter, which cannot be redefined.
Sigh! The mutex implementation is pretty broken. It basically cannot work with a different implementation than the default one, and if it ever do, it must be more from pure luck than any design.
We should rewrite all of the lock, mutex and rwlock api. Anyone feel like doing the work with me? Or do people think that it's time better spent doing something else? :-)
Johnny