Int64 HawkMemoryFile::Write(const void* pData, Int64 iSize, Bool bFlush) { if (!pData || iSize <= 0 || (m_eOpenType != OPEN_WRITE && m_eOpenType != OPEN_RW && m_eOpenType != OPEN_APPEND) ) return 0; if (m_iFilePos + iSize > m_iFileSize) { Int64 iTmp = m_iFileSize + iSize; void* pTmp = HawkMalloc((Size_t)iTmp); memset(pTmp, 0, (Size_t)iTmp); if (m_pData) { memcpy(pTmp, m_pData, (Size_t)m_iFileSize); HawkFree(m_pData); m_pData = 0; } m_pData = pTmp; m_iFileSize = m_iFilePos + iSize; } memcpy((Char*)m_pData+m_iFilePos, pData, (Size_t)iSize); m_iFilePos += iSize; return iSize; }
Bool HawkMemoryFile::Chsize(Int64 iSize) { if((m_eOpenType == OPEN_WRITE || m_eOpenType == OPEN_RW || m_eOpenType == OPEN_APPEND)) { void* pData = HawkMalloc((Size_t)iSize); if (pData) { memset(pData, 0, (Size_t)iSize); if(m_pData) { Int64 iTmp = HawkMath::Min<Int64>(iSize, m_iFileSize); memcpy(pData, m_pData, (Size_t)iTmp); HawkFree(m_pData); m_pData = 0; } } m_iFileSize = iSize; m_iFilePos = 0; m_pData = pData; return true; } return false; }
HawkLogServer::~HawkLogServer() { m_sSocket.Close(); HawkFree(m_pFmtBuf); HAWK_RELEASE(m_pRecvBuf); HAWK_RELEASE(m_pLogCache); HAWK_RELEASE(m_pLogFile); }
HawkSpinLock::~HawkSpinLock() { if (m_pSpinLock) { pthread_spin_destroy((pthread_spinlock_t*)m_pSpinLock); HawkFree(m_pSpinLock); m_pSpinLock = 0; } }
HawkOctets::~HawkOctets() { if(m_pBase) { HawkFree(m_pBase); m_pBase = 0; } m_pHigh = 0; m_iCap = 0; }
HawkThread::~HawkThread() { Close(); if (m_pThread) { HawkFree(m_pThread); m_pThread = 0; } HAWK_RELEASE(m_pMutex); }
Int64 HawkMemoryFile::Seek(Int64 iOffset, SeekPos ePos) { Int64 iRealPos = m_iFilePos; Int64 iOldPos = m_iFilePos; if (ePos == POS_BEGIN) { iRealPos = iOffset; } else if (ePos == POS_CURRENT) { iRealPos = m_iFilePos + iOffset; } else { iRealPos = m_iFileSize + iOffset; } if(iRealPos > m_iFileSize) { if((m_eOpenType == OPEN_WRITE || m_eOpenType == OPEN_RW || m_eOpenType == OPEN_APPEND)) { void* pData = HawkMalloc((Size_t)iRealPos); if (pData) { memset(pData, 0, (Size_t)iRealPos); if(m_pData) { memcpy(pData, m_pData, (Size_t)m_iFileSize); HawkFree(m_pData); m_pData = 0; } } m_iFileSize = iRealPos; m_iFilePos = iRealPos; m_pData = pData; } else { m_iFilePos = m_iFileSize; } } else { m_iFilePos = iRealPos; } return m_iFilePos - iOldPos; }
HawkSpinLock::HawkSpinLock() : m_pSpinLock(0) { m_pSpinLock = HawkMalloc(sizeof(pthread_spinlock_t)); if (pthread_spin_init((pthread_spinlock_t*)m_pSpinLock, 0) != HAWK_OK) { HawkFree(m_pSpinLock); m_pSpinLock = 0; } #ifdef _DEBUG m_bLocked = false; m_sFile = ""; m_iLine = 0; m_iThread = 0; #endif }
Bool HawkMemoryFile::Close() { m_iFilePos = 0; m_iFileSize = 0; if (!m_bExtra) { HawkFree(m_pData); m_pData = 0; } else { m_pData = 0; } return true; }
Bool HawkThread::Close() { if (m_pThread && m_bRunning) { m_bRunning = false; m_iState = STATE_CLOSING; //µÈ´ýÏ߳̽áÊø pthread_join(*((pthread_t*)m_pThread), 0); HawkFree(m_pThread); m_pThread = 0; m_iId = 0; m_iState = STATE_CLOSED; } ClearTaskQueue(); return true; }
HawkOctets& HawkOctets::Reserve(UInt32 iSize) { if(iSize > m_iCap) { for(iSize--,m_iCap=2; iSize>>=1; m_iCap<<=1); iSize = (UInt32)((Char*)m_pHigh-(Char*)m_pBase); void* pBase = m_pBase; m_pBase = HawkRealloc(m_pBase,m_iCap); if (!m_pBase) { HawkFree(pBase); T_Exception("Octets Realloc Failed."); } else { m_pHigh = (Char*)m_pBase+iSize; } } return *this; }
Bool HawkGateThread::FreeSession(Session* pSession) { if (pSession) { //释放事件 if (pSession->Event) { bufferevent_free((bufferevent*)pSession->Event); pSession->Event = 0; } //释放内存 HAWK_RELEASE(pSession->Addr); HAWK_RELEASE(pSession->IBuffer); HAWK_RELEASE(pSession->ISecurity); HAWK_RELEASE(pSession->OSecurity); //释放会话 HawkFree(pSession); return true; } return false; }
void HawkRefCounter::operator delete(void* pData, Size_t iSize) { HawkFree(pData); }