| Return Type | Function name | Arguments |
|---|---|---|
| void | hzChain::Clear | (void) |
Declared in file: hzChain.h
Defined in file : hzChain.cpp
Function Logic:
Function body:
void hzChain::Clear (void)
{
_hzfunc("hzChain::Clear") ;
_chain* cx ;
_zblk* zp ;
_zblk* np ;
if (!mx)
return ;
cx = mx ;
mx = 0;
if (cx->m_Test != cx)
hzexit(E_CORRUPT, "Chain is not self addressing") ;
if (cx->m_copy <&eq; 0)
hzexit(E_CORRUPT, "Copy count must be at least 1 in live chain") ;
if (_hzGlobal_MT)
{
__sync_add_and_fetch(&(cx->m_copy), -1);
if (cx->m_copy)
return ;
}
else
{
cx->m_copy-- ;
if (cx->m_copy)
return ;
}
if (cx->m_Begin)
{
s_chain_mutex.LockWrite() ;
if (!cx->m_End)
hzexit(E_CORRUPT, "No end block") ;
for (zp = (_zblk*) cx->m_Begin ; zp ; zp = np)
{
np = zp->Next() ;
delete zp ;
_hzGlobal_Memstats.m_numChainBlks-- ;
}
s_chain_mutex.Unlock() ;
}
delete cx ;
}