From 495f6ebc90d4adbd351cb965d7fa856f4a97447a Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 1 Dec 2013 20:53:56 +0000 Subject: one another brake removed from MRA git-svn-id: http://svn.miranda-ng.org/main/trunk@7025 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/MRA/src/MraAvatars.cpp | 13 +++++++------ protocols/MRA/src/MraProto.cpp | 3 ++- protocols/MRA/src/MraProto.h | 1 + 3 files changed, 10 insertions(+), 7 deletions(-) (limited to 'protocols/MRA/src') diff --git a/protocols/MRA/src/MraAvatars.cpp b/protocols/MRA/src/MraAvatars.cpp index 33907a5da0..344b754391 100644 --- a/protocols/MRA/src/MraAvatars.cpp +++ b/protocols/MRA/src/MraAvatars.cpp @@ -109,18 +109,19 @@ void CMraProto::MraAvatarsQueueClear(HANDLE hAvatarsQueueHandle) } } -void CMraProto::MraAvatarsQueueDestroy(HANDLE hAvatarsQueueHandle) +void CMraProto::MraAvatarsQueueSuspend(HANDLE hAvatarsQueueHandle) { - if ( !hAvatarsQueueHandle) - return; - MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = (MRA_AVATARS_QUEUE*)hAvatarsQueueHandle; - InterlockedExchange((volatile LONG*)&pmraaqAvatarsQueue->bIsRunning, FALSE); SetEvent(pmraaqAvatarsQueue->hThreadEvent); +} - WaitForMultipleObjects(pmraaqAvatarsQueue->iThreadsCount, (HANDLE*)&pmraaqAvatarsQueue->hThread[0], TRUE, (WAIT_FOR_THREAD_TIMEOUT*1000)); +void CMraProto::MraAvatarsQueueDestroy(HANDLE hAvatarsQueueHandle) +{ + if ( !hAvatarsQueueHandle) + return; + MRA_AVATARS_QUEUE *pmraaqAvatarsQueue = (MRA_AVATARS_QUEUE*)hAvatarsQueueHandle; if (InterlockedExchangeAdd((volatile LONG*)&pmraaqAvatarsQueue->lThreadsRunningCount, 0)) while (InterlockedExchangeAdd((volatile LONG*)&pmraaqAvatarsQueue->lThreadsRunningCount, 0)) SleepEx(100, TRUE); diff --git a/protocols/MRA/src/MraProto.cpp b/protocols/MRA/src/MraProto.cpp index 79349466bf..e050882e99 100644 --- a/protocols/MRA/src/MraProto.cpp +++ b/protocols/MRA/src/MraProto.cpp @@ -71,6 +71,7 @@ CMraProto::~CMraProto() if (m_heNudgeReceived) DestroyHookableEvent(m_heNudgeReceived); + MraAvatarsQueueDestroy(hAvatarsQueueHandle); MraMPopSessionQueueDestroy(hMPopSessionQueue); MraFilesQueueDestroy(hFilesQueueHandle); MraSendQueueDestroy(hSendQueueHandle); @@ -123,7 +124,7 @@ int CMraProto::OnModulesLoaded(WPARAM, LPARAM) int CMraProto::OnPreShutdown(WPARAM, LPARAM) { SetStatus(ID_STATUS_OFFLINE); - MraAvatarsQueueDestroy(hAvatarsQueueHandle); hAvatarsQueueHandle = NULL; + MraAvatarsQueueSuspend(hAvatarsQueueHandle); return 0; } diff --git a/protocols/MRA/src/MraProto.h b/protocols/MRA/src/MraProto.h index 8ed9b1696b..4e364ccc2f 100644 --- a/protocols/MRA/src/MraProto.h +++ b/protocols/MRA/src/MraProto.h @@ -332,6 +332,7 @@ struct CMraProto : public PROTO DWORD MraAvatarsQueueInitialize(HANDLE *phAvatarsQueueHandle); void MraAvatarsQueueClear(HANDLE hAvatarsQueueHandle); + void MraAvatarsQueueSuspend(HANDLE hAvatarsQueueHandle); void MraAvatarsQueueDestroy(HANDLE hAvatarsQueueHandle); DWORD MraAvatarsQueueAdd(HANDLE hAvatarsQueueHandle, DWORD dwFlags, HANDLE hContact, DWORD *pdwAvatarsQueueID); bool MraAvatarsGetContactTime (HANDLE hContact, LPSTR lpszValueName, SYSTEMTIME *pstTime); -- cgit v1.2.3