BOOL CJabberIqManager::DeleteHandler(CJabberIqInfo *pInfo) { // returns TRUE when pInfo found, or FALSE otherwise mir_cslockfull lck(m_cs); if (!m_pIqs) return FALSE; if (m_pIqs == pInfo) { // check first item m_pIqs = m_pIqs->m_pNext; lck.unlock(); ExpireInfo(pInfo); // must expire it to allow the handler to free m_pUserData if necessary delete pInfo; return TRUE; } CJabberIqInfo *pTmp = m_pIqs; while (pTmp->m_pNext) { if (pTmp->m_pNext == pInfo) { pTmp->m_pNext = pTmp->m_pNext->m_pNext; lck.unlock(); ExpireInfo(pInfo); // must expire it to allow the handler to free m_pUserData if necessary delete pInfo; return TRUE; } pTmp = pTmp->m_pNext; } return FALSE; }
void CJabberIqManager::ExpirerThread() { while (!m_bExpirerThreadShutdownRequest) { Lock(); CJabberIqInfo* pInfo = DetachExpired(); Unlock(); if (!pInfo) { for (int i = 0; !m_bExpirerThreadShutdownRequest && (i < 10); i++) Sleep(50); // -1 thread :) ppro->m_adhocManager.ExpireSessions(); continue; } ExpireInfo( pInfo ); delete pInfo; } if ( !m_bExpirerThreadShutdownRequest ) { CloseHandle( m_hExpirerThread ); m_hExpirerThread = NULL; } }
bool CJabberIqManager::ExpireByUserData(void *pUserData) { bool bRet = false; while (CJabberIqInfo *pInfo = DetouchInfo(pUserData)) { ExpireInfo(pInfo); bRet = true; } return bRet; }
BOOL CJabberIqManager::ExpireByUserData(void *pUserData) { while (true) { CJabberIqInfo *pInfo = DetachInfo(pUserData); if (!pInfo) return FALSE; ExpireInfo(pInfo, NULL); delete pInfo; return TRUE; } }
BOOL CJabberIqManager::ExpireIq(int nIqId) { CJabberIqInfo *pInfo = DetachInfo(nIqId); if (pInfo) { do { ExpireInfo(pInfo); delete pInfo; } while ((pInfo = DetachInfo(nIqId)) != NULL); return TRUE; } return FALSE; }
bool CJabberIqManager::DeleteHandler(CJabberIqInfo *pInfo) { // returns TRUE when pInfo found, or FALSE otherwise mir_cslockfull lck(m_cs); for (int i = 0; i < m_arIqs.getCount(); i++) { if (m_arIqs[i] == pInfo) { m_arIqs.remove(i); lck.unlock(); ExpireInfo(pInfo); // must expire it to allow the handler to free m_pUserData if necessary return true; } } return false; }
BOOL CJabberIqManager::ExpireAll(void *pUserData) { while (true) { CJabberIqInfo *pInfo; { mir_cslock lck(m_cs); pInfo = m_pIqs; if (pInfo) m_pIqs = m_pIqs->m_pNext; } if (!pInfo) break; pInfo->m_pNext = NULL; ExpireInfo(pInfo, pUserData); delete pInfo; } return TRUE; }
void CJabberIqManager::ExpirerThread() { Thread_SetName("Jabber: ExpirerThread"); while (!m_bExpirerThreadShutdownRequest) { CJabberIqInfo *pInfo = DetouchExpired(); if (!pInfo) { for (int i=0; !m_bExpirerThreadShutdownRequest && (i < 10); i++) Sleep(50); // -1 thread :) ppro->m_adhocManager.ExpireSessions(); continue; } ExpireInfo(pInfo); } if (!m_bExpirerThreadShutdownRequest) { CloseHandle(m_hExpirerThread); m_hExpirerThread = NULL; } }
void CJabberIqManager::ExpireAll() { while (CJabberIqInfo *pInfo = DetouchInfo()) ExpireInfo(pInfo); }
void CJabberIqManager::ExpireIq(int nIqId) { while (CJabberIqInfo *pInfo = DetouchInfo(nIqId)) ExpireInfo(pInfo); }