Return TypeFunction nameArguments
hzEcodehzLockS::Lock(int,)

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

Function Logic:

0:START 1:!_hzGlobal_MT 2:Return E_OK 3:pthread_self tid limit 4:m_lockval==tid 5:Fatal cont tries 6:; 7:m_lockval==0xffffffff 8:Return E_NOTFOUND 9:m_lockval 10:items 11:!__sync_val_compare_and_swap(&m_lockval,0,tid) 12:m_lockval==tid 13:items 14:tries>limit 15:Return E_TIMEOUT 16:m_lockval 17:Return E_OK

Function body:

hzEcode hzLockS::Lock (int nTries)
{
   uint32_t    cont ;
   uint32_t    tries ;
   uint32_t    tid ;
   uint32_t    limit ;
   if (!_hzGlobal_MT)
       return E_OK ;
   tid = pthread_self() ;
   limit = nTries < 0? 0xfffffffe:nTries*1000;
   if (m_lockval == tid)
       Fatal("hzLockS::hzLockS. Attempt by thread %u to re-lock address %p\n", tid, &m_lockval) ;
   for (tries = cont = 0;;)
   {
       if (m_lockval == 0xffffffff)
           return E_NOTFOUND ;
       if (m_lockval)
           { cont++ ; continue ; }
       if (!__sync_val_compare_and_swap(&m_lockval, 0,tid))
       {
           if (m_lockval == tid)
               break ;
       }
       tries++ ;
       if (tries > limit)
           return E_TIMEOUT ;
   }
   m_lockval = tid ;
   return E_OK ;
}