Fix issue #170. Intermittent crash destroying fastlock due to implicit type conversion in assert
Former-commit-id: ecbe168b5421687899a621c995e44f43faec2b71
This commit is contained in:
parent
fa671d5193
commit
c15802af8b
@ -433,8 +433,9 @@ extern "C" void unlock_futex(struct fastlock *lock, uint16_t ifutex)
|
|||||||
extern "C" void fastlock_free(struct fastlock *lock)
|
extern "C" void fastlock_free(struct fastlock *lock)
|
||||||
{
|
{
|
||||||
// NOP
|
// NOP
|
||||||
serverAssert((lock->m_ticket.m_active == lock->m_ticket.m_avail) // Asser the lock is unlocked
|
serverAssert((lock->m_ticket.m_active == lock->m_ticket.m_avail) // Assert the lock is unlocked
|
||||||
|| (lock->m_pidOwner == gettid() && (lock->m_ticket.m_active == lock->m_ticket.m_avail-1))); // OR we own the lock and nobody else is waiting
|
|| (lock->m_pidOwner == gettid()
|
||||||
|
&& (lock->m_ticket.m_active == static_cast<uint16_t>(lock->m_ticket.m_avail-1U)))); // OR we own the lock and nobody else is waiting
|
||||||
lock->m_pidOwner = -2; // sentinal value indicating free
|
lock->m_pidOwner = -2; // sentinal value indicating free
|
||||||
ANNOTATE_RWLOCK_DESTROY(lock);
|
ANNOTATE_RWLOCK_DESTROY(lock);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user