summaryrefslogtreecommitdiff
path: root/protocols
diff options
context:
space:
mode:
authoraunsane <aunsane@gmail.com>2017-12-29 16:03:42 +0300
committeraunsane <aunsane@gmail.com>2017-12-29 16:04:05 +0300
commit939048b7ebce6a70c8e243fec36983de7d931e8b (patch)
tree8921c8e97595c9817537cf02feb151c947fa5f44 /protocols
parentc4759940cdd3af9b314f71b3eec461b888cf62df (diff)
Steam: fix high CPU usage
Diffstat (limited to 'protocols')
-rw-r--r--protocols/Steam/src/steam_login.cpp4
-rw-r--r--protocols/Steam/src/steam_proto.cpp15
-rw-r--r--protocols/Steam/src/steam_proto.h4
-rw-r--r--protocols/Steam/src/steam_request.cpp10
4 files changed, 21 insertions, 12 deletions
diff --git a/protocols/Steam/src/steam_login.cpp b/protocols/Steam/src/steam_login.cpp
index 3375a128d5..def14a9d26 100644
--- a/protocols/Steam/src/steam_login.cpp
+++ b/protocols/Steam/src/steam_login.cpp
@@ -75,8 +75,8 @@ bool CSteamProto::Relogin()
void CSteamProto::LogOut()
{
isTerminated = true;
- if (hRequestQueueThread)
- SetEvent(hRequestsQueueEvent);
+ if (m_hRequestQueueThread)
+ SetEvent(m_hRequestsQueueEvent);
ptrA token(getStringA("TokenSecret"));
if (mir_strlen(token) > 0)
diff --git a/protocols/Steam/src/steam_proto.cpp b/protocols/Steam/src/steam_proto.cpp
index 68c6c28767..fd7d5cf9d8 100644
--- a/protocols/Steam/src/steam_proto.cpp
+++ b/protocols/Steam/src/steam_proto.cpp
@@ -11,6 +11,7 @@ CSteamProto::CSteamProto(const char* protoName, const wchar_t* userName)
isLoginAgain = false;
m_pollingConnection = nullptr;
m_hPollingThread = nullptr;
+ m_hRequestsQueueEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
// icons
wchar_t filePath[MAX_PATH];
@@ -78,8 +79,16 @@ CSteamProto::CSteamProto(const char* protoName, const wchar_t* userName)
CSteamProto::~CSteamProto()
{
- Netlib_CloseHandle(m_hNetlibUser);
- m_hNetlibUser = NULL;
+ if (m_hNetlibUser)
+ {
+ Netlib_CloseHandle(m_hNetlibUser);
+ m_hNetlibUser = nullptr;
+ }
+ if (m_hRequestsQueueEvent)
+ {
+ CloseHandle(m_hRequestsQueueEvent);
+ m_hRequestsQueueEvent = nullptr;
+ }
}
MCONTACT CSteamProto::AddToList(int, PROTOSEARCHRESULT* psr)
@@ -322,7 +331,7 @@ int CSteamProto::SetStatus(int new_status)
isTerminated = false;
- hRequestQueueThread = ForkThreadEx(&CSteamProto::RequestQueueThread, NULL, NULL);
+ m_hRequestQueueThread = ForkThreadEx(&CSteamProto::RequestQueueThread, NULL, NULL);
}
diff --git a/protocols/Steam/src/steam_proto.h b/protocols/Steam/src/steam_proto.h
index b07f44649c..fee78f4b02 100644
--- a/protocols/Steam/src/steam_proto.h
+++ b/protocols/Steam/src/steam_proto.h
@@ -87,8 +87,8 @@ protected:
time_t m_idleTS;
bool isTerminated, isConnected;
mir_cs requestQueueLock;
- HANDLE hRequestsQueueEvent;
- HANDLE hRequestQueueThread;
+ HANDLE m_hRequestsQueueEvent;
+ HANDLE m_hRequestQueueThread;
LIST<RequestQueueItem> requestQueue;
HANDLE m_pollingConnection, m_hPollingThread;
ULONG hAuthProcess;
diff --git a/protocols/Steam/src/steam_request.cpp b/protocols/Steam/src/steam_request.cpp
index ba2d931aa9..363f31a328 100644
--- a/protocols/Steam/src/steam_request.cpp
+++ b/protocols/Steam/src/steam_request.cpp
@@ -37,7 +37,7 @@ void CSteamProto::PushRequest(HttpRequest *request)
mir_cslock lock(requestQueueLock);
requestQueue.insert(item);
}
- SetEvent(hRequestsQueueEvent);
+ SetEvent(m_hRequestsQueueEvent);
}
void CSteamProto::PushRequest(HttpRequest *request, HttpCallback callback, void *param)
@@ -50,7 +50,7 @@ void CSteamProto::PushRequest(HttpRequest *request, HttpCallback callback, void
mir_cslock lock(requestQueueLock);
requestQueue.insert(item);
}
- SetEvent(hRequestsQueueEvent);
+ SetEvent(m_hRequestsQueueEvent);
}
void CSteamProto::PushRequest(HttpRequest *request, JsonCallback callback, void *param)
@@ -63,7 +63,7 @@ void CSteamProto::PushRequest(HttpRequest *request, JsonCallback callback, void
mir_cslock lock(requestQueueLock);
requestQueue.insert(item);
}
- SetEvent(hRequestsQueueEvent);
+ SetEvent(m_hRequestsQueueEvent);
}
void CSteamProto::RequestQueueThread(void*)
@@ -91,8 +91,8 @@ void CSteamProto::RequestQueueThread(void*)
SendRequest(item->request);
delete item;
}
- WaitForSingleObject(hRequestsQueueEvent, 1000);
+ WaitForSingleObject(m_hRequestsQueueEvent, 1000);
} while (!isTerminated);
- hRequestQueueThread = NULL;
+ m_hRequestQueueThread = NULL;
} \ No newline at end of file