| Return Type | Function name | Arguments |
|---|---|---|
| void | hzLockRWD::Unlock | (void) |
Declared in file: hzLock.h
Defined in file : hzLock.cpp
Function Logic:
Function body:
void hzLockRWD::Unlock (void)
{
_hzfunc("hzLockRWD::Unlock") ;
uint32_t tid ;
/*
** if (_hzGlobal_MT)
** {
** tid = pthread_self() ;
**
** if (!m_lockval)
** hzexit(E_CORRUPT, "Attempting to unlock mutex %d that is not locked by any thread", m_Id) ;
**
** if (m_lockval != tid)
** hzexit(E_CORRUPT, "Attempting to unlock mutex %d that is locked by another thread (%u)", m_Id, m_lockval) ;
**
** // Must unset m_lockval before we release the lock
** if (m_recurse)
** {
** m_recurse-- ;
** m_UnlocksR++ ;
** }
** else
** {
** m_lockval = 0 ;
** m_UnlocksP++ ;
** m_Inuse += (RealtimeNano() - m_Granted) ;
** }
** }
** */
if (_hzGlobal_MT)
{
if (m_lockval == 0xffffffff)
hzexit(E_CORRUPT, "Attempting to unlock a deprecated lock") ;
tid = pthread_self() ;
if (m_lockval == tid)
{
m_lockval = 0;
}
else
{
if (m_lockval != 0xffffffff)
{
if (m_counter == 0)
hzexit(E_CORRUPT, "Lock count already zero") ;
while (__sync_add_and_fetch(&m_counter, -1));
}
}
}
}