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