ThreadingWin: Mutex::unlock() can be "over-unlocked".
authorjer.noble@apple.com <jer.noble@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Apr 2012 20:35:18 +0000 (20:35 +0000)
committerjer.noble@apple.com <jer.noble@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 Apr 2012 20:35:18 +0000 (20:35 +0000)
commitf0ceeb73598ff1b9a8e772509bcff910f22f4e15
tree38e26e3aa24160b089d07bf5d89a185cf61b97e8
parentc3ba596a3cbe6607c1844a2ffd55e0a720db6f9f
ThreadingWin: Mutex::unlock() can be "over-unlocked".
https://bugs.webkit.org/show_bug.cgi?id=83725

Reviewed by David Levin.

In order to support the behavior of pthread_mutex_trylock(), the Windows Mutex class includes
a recursion counter which is incremented in Mutex::lock(), decremented in Mutex::unlock(),
and checked in Mutex::tryLock().  If the mutex is "over-unlocked", the counter wraps around to
MAX_INT, and subsequent calls to Mutex::trylock() will fail. Raise an ASSERT in this situation
so the "over-unlock" will be caught.

* wtf/ThreadingWin.cpp:
(WTF::Mutex::unlock): ASSERT if unlocking a non-locked mutex.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@114028 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WTF/ChangeLog
Source/WTF/wtf/ThreadingWin.cpp