diff options
author | George Hazan <george.hazan@gmail.com> | 2024-07-22 19:00:11 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2024-07-22 19:00:11 +0300 |
commit | fad8f014de1584912a2e2ab022de9e76e937dd24 (patch) | |
tree | 9394b7e959d93db079969c8208a4530dc3ec59d7 | |
parent | 18db8c6eb17021f64e14406133b2bc38a4f98243 (diff) |
fixes #4560 (SkypeWeb: зависание)
-rw-r--r-- | protocols/SkypeWeb/src/request_queue.cpp | 10 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_login.cpp | 3 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_polling.cpp | 2 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_proto.cpp | 13 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/skype_proto.h | 7 | ||||
-rw-r--r-- | protocols/SkypeWeb/src/version.h | 2 |
6 files changed, 14 insertions, 23 deletions
diff --git a/protocols/SkypeWeb/src/request_queue.cpp b/protocols/SkypeWeb/src/request_queue.cpp index aff9f07521..39dc13b8aa 100644 --- a/protocols/SkypeWeb/src/request_queue.cpp +++ b/protocols/SkypeWeb/src/request_queue.cpp @@ -58,11 +58,13 @@ void CSkypeProto::StartQueue() void CSkypeProto::StopQueue()
{
- if (m_isTerminated)
- return;
-
m_isTerminated = true;
- m_hRequestQueueEvent.Set();
+
+ if (m_hRequestQueueThread)
+ m_hRequestQueueEvent.Set();
+
+ if (m_hPollingThread)
+ m_hPollingEvent.Set();
}
void CSkypeProto::PushRequest(AsyncHttpRequest *request)
diff --git a/protocols/SkypeWeb/src/skype_login.cpp b/protocols/SkypeWeb/src/skype_login.cpp index 74641eb5e7..09206e19e6 100644 --- a/protocols/SkypeWeb/src/skype_login.cpp +++ b/protocols/SkypeWeb/src/skype_login.cpp @@ -59,7 +59,7 @@ void CSkypeProto::Login() return;
}
- m_bHistorySynced = m_bThreadsTerminated = false;
+ m_bHistorySynced = false;
if ((tokenExpires - 1800) > time(0))
OnLoginSuccess();
else
@@ -134,7 +134,6 @@ void CSkypeProto::OnLoginSuccess() if (!IsStatusConnecting(m_iStatus))
return;
- m_bThreadsTerminated = false;
ProtoBroadcastAck(NULL, ACKTYPE_LOGIN, ACKRESULT_SUCCESS, NULL, 0);
int oldStatus = m_iStatus;
diff --git a/protocols/SkypeWeb/src/skype_polling.cpp b/protocols/SkypeWeb/src/skype_polling.cpp index 5a680dab30..e1d51e49a5 100644 --- a/protocols/SkypeWeb/src/skype_polling.cpp +++ b/protocols/SkypeWeb/src/skype_polling.cpp @@ -23,7 +23,7 @@ void CSkypeProto::PollingThread(void *) while (true) {
m_hPollingEvent.Wait();
- if (m_bThreadsTerminated)
+ if (m_isTerminated)
break;
int nErrors = 0;
diff --git a/protocols/SkypeWeb/src/skype_proto.cpp b/protocols/SkypeWeb/src/skype_proto.cpp index df6ea85f2c..e57ed0c346 100644 --- a/protocols/SkypeWeb/src/skype_proto.cpp +++ b/protocols/SkypeWeb/src/skype_proto.cpp @@ -21,7 +21,6 @@ CSkypeProto::CSkypeProto(const char* protoName, const wchar_t* userName) : PROTO<CSkypeProto>(protoName, userName),
m_PopupClasses(1),
m_OutMessages(3, PtrKeySortT),
- m_bThreadsTerminated(false),
m_impl(*this),
m_requests(1),
bAutoHistorySync(this, "AutoSync", true),
@@ -65,8 +64,9 @@ CSkypeProto::CSkypeProto(const char* protoName, const wchar_t* userName) : CSkypeProto::~CSkypeProto()
{
- StopQueue();
if (m_hRequestQueueThread) {
+ m_hRequestQueueEvent.Set();
+
WaitForSingleObject(m_hRequestQueueThread, INFINITE);
m_hRequestQueueThread = nullptr;
}
@@ -74,6 +74,8 @@ CSkypeProto::~CSkypeProto() UninitPopups();
if (m_hPollingThread) {
+ m_hPollingEvent.Set();
+
WaitForSingleObject(m_hPollingThread, INFINITE);
m_hPollingThread = nullptr;
}
@@ -91,14 +93,7 @@ void CSkypeProto::OnModulesLoaded() void CSkypeProto::OnShutdown()
{
- debugLogA(__FUNCTION__);
-
StopQueue();
-
- m_bThreadsTerminated = true;
-
- m_hPollingEvent.Set();
- m_hTrouterEvent.Set();
}
INT_PTR CSkypeProto::GetCaps(int type, MCONTACT)
diff --git a/protocols/SkypeWeb/src/skype_proto.h b/protocols/SkypeWeb/src/skype_proto.h index a4f9d7850f..488e7db19d 100644 --- a/protocols/SkypeWeb/src/skype_proto.h +++ b/protocols/SkypeWeb/src/skype_proto.h @@ -181,13 +181,8 @@ private: mir_cs messageSyncLock;
mir_cs m_StatusLock;
- bool m_bThreadsTerminated;
-
EventHandle m_hPollingEvent;
- EventHandle m_hTrouterEvent;
-
- EventHandle m_hTrouterHealthEvent;
-
+
INT_PTR __cdecl SvcGetAvatarInfo(WPARAM, LPARAM);
INT_PTR __cdecl SvcGetAvatarCaps(WPARAM, LPARAM);
INT_PTR __cdecl SvcGetMyAvatar(WPARAM, LPARAM);
diff --git a/protocols/SkypeWeb/src/version.h b/protocols/SkypeWeb/src/version.h index 89c0b14b1f..5029f2c626 100644 --- a/protocols/SkypeWeb/src/version.h +++ b/protocols/SkypeWeb/src/version.h @@ -1,6 +1,6 @@ #define __MAJOR_VERSION 0
#define __MINOR_VERSION 96
-#define __RELEASE_NUM 3
+#define __RELEASE_NUM 6
#define __BUILD_NUM 1
#include <stdver.h>
|