Skip to content
Permalink
Browse files

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.
  • Loading branch information...
leoetlino committed Jun 13, 2019
1 parent cea1b58 commit a6f4cb164752ce5dbafcd3900e7f46df938d654a
Showing with 10 additions and 6 deletions.
  1. +8 −6 Source/Core/DolphinQt/DiscordHandler.cpp
  2. +2 −0 Source/Core/DolphinQt/DiscordHandler.h
@@ -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});
}
}

@@ -10,6 +10,7 @@

#include <QObject>

#include "Common/Event.h"
#include "Common/Flag.h"

#include "UICommon/DiscordPresence.h"
@@ -42,6 +43,7 @@ class DiscordHandler : public QObject, public Discord::Handler
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;

0 comments on commit a6f4cb1

Please sign in to comment.
You can’t perform that action at this time.