Return TypeFunction nameArguments
voidhzLockRWD::Unlock(void)

Declared in file: hzLock.h
Defined in file : hzLock.cpp

Function Logic:

0:START 1:_hzGlobal_MT 2:m_lockval==0xffffffff 3:hzexit 4:pthread_self tid 5:m_lockval==tid 6:m_lockval 7:m_lockval!=0xffffffff 8:m_counter==0 9:hzexit 10:unknown 11: No text

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));
           }
       }
   }
}