| Return Type | Function name | Arguments |
|---|---|---|
| void | hzXbuf::Clear | (void) |
Declared in file: hzXbuf.h
Defined in file : hzXbuf.cpp
Function Logic:
Function body:
void hzXbuf::Clear (void)
{
_hzfunc("hzXbuf::Clear") ;
_xbuf* cx ;
_xblk* zp ;
uint32_t count ;
if (!mx)
return ;
cx = mx ;
mx = 0;
if (_hzGlobal_MT)
{
__sync_add_and_fetch((uint32_t*)&(cx->m_copy), -1);
if (cx->m_copy)
return ;
}
else
{
cx->m_copy-- ;
if (cx->m_copy)
return ;
}
if (cx->m_Begin)
{
s_xbuf_mutex.LockWrite() ;
if (!cx->m_End)
hzexit(E_CORRUPT, "The internal begin/end blocks are %p and %p", cx->m_Begin, cx->m_End) ;
zp = (_xblk*) cx->m_End ;
zp->Next(s_xblk_free) ;
s_xblk_free = (_xblk*) cx->m_Begin ;
cx->m_Begin = cx->m_End = 0;
cx->m_nSize = 0;
count = cx->m_nSize / XBLKSIZE ;
if (cx->m_nSize % XBLKSIZE)
count++ ;
_hzGlobal_Memstats.m_numChainBF += count ;
s_xbuf_mutex.Unlock() ;
}
delete cx ;
}