Fix issue #170. Intermittent crash destroying fastlock due to implicit type conversion in assert

Former-commit-id: ecbe168b5421687899a621c995e44f43faec2b71
This commit is contained in:
John Sully 2020-05-25 02:13:57 -04:00
parent 9a357ec4b5
commit 4bb5c35548

View File

@ -433,8 +433,9 @@ extern "C" void unlock_futex(struct fastlock *lock, uint16_t ifutex)
extern "C" void fastlock_free(struct fastlock *lock)
{
// NOP
serverAssert((lock->m_ticket.m_active == lock->m_ticket.m_avail) // Asser 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
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 == 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
ANNOTATE_RWLOCK_DESTROY(lock);
}