DiscordHandler: Don't delay shutdown by up to 2s

Currently, it is possible for the DiscordHandler thread to be in the
middle of sleeping when Dolphin is closing. This results in a very
noticeable delay of up to 2 seconds that is unacceptable, especially
for people who don't use the Discord integration.

This fixes the issue by making the thread wait on an Event instead
and signalling it when shutting down.
This commit is contained in:
Léo Lam 2019-06-13 23:34:25 +02:00
parent cea1b58919
commit a6f4cb1647
2 changed files with 10 additions and 6 deletions

View File

@ -6,6 +6,7 @@
#include "DolphinQt/DiscordHandler.h"
#include <chrono>
#include <iterator>
#include <QApplication>
@ -35,10 +36,12 @@ void DiscordHandler::Start()
void DiscordHandler::Stop()
{
m_stop_requested.Set(true);
if (!m_thread.joinable())
return;
if (m_thread.joinable())
m_thread.join();
m_stop_requested.Set(true);
m_wakeup_event.Set();
m_thread.join();
}
void DiscordHandler::DiscordJoinRequest(const char* id, const std::string& discord_tag,
@ -68,8 +71,7 @@ void DiscordHandler::Run()
{
while (!m_stop_requested.IsSet())
{
if (m_thread.joinable())
Discord::CallPendingCallbacks();
Discord::CallPendingCallbacks();
// close and remove dead requests
{
@ -91,7 +93,7 @@ void DiscordHandler::Run()
}
}
Common::SleepCurrentThread(1000 * 2);
m_wakeup_event.WaitFor(std::chrono::seconds{2});
}
}

View File

@ -10,6 +10,7 @@
#include <QObject>
#include "Common/Event.h"
#include "Common/Flag.h"
#include "UICommon/DiscordPresence.h"
@ -42,6 +43,7 @@ private:
void Run();
QWidget* m_parent;
Common::Flag m_stop_requested;
Common::Event m_wakeup_event;
std::thread m_thread;
std::list<DiscordJoinRequestDialog> m_request_dialogs;
std::mutex m_request_dialogs_mutex;