diff --git a/src/singletons/NativeMessaging.cpp b/src/singletons/NativeMessaging.cpp index 71029ded628..ef42e706da1 100644 --- a/src/singletons/NativeMessaging.cpp +++ b/src/singletons/NativeMessaging.cpp @@ -137,12 +137,11 @@ void NativeMessagingServer::start() void NativeMessagingServer::ReceiverThread::run() { - auto result = + auto [messageQueue, error] = ipc::IpcQueue::tryReplaceOrCreate("chatterino_gui", 100, MESSAGE_SIZE); - if (std::holds_alternative(result)) + if (!error.isEmpty()) { - auto error = std::get(result); qCDebug(chatterinoNativeMessage) << "Failed to create message queue:" << error; @@ -150,10 +149,9 @@ void NativeMessagingServer::ReceiverThread::run() return; } - auto &messageQueue = std::get(result); while (true) { - auto buf = messageQueue.receive(); + auto buf = messageQueue->receive(); if (buf.isEmpty()) { continue; diff --git a/src/util/IpcQueue.cpp b/src/util/IpcQueue.cpp index aac4337b799..0efc878fc59 100644 --- a/src/util/IpcQueue.cpp +++ b/src/util/IpcQueue.cpp @@ -41,17 +41,20 @@ IpcQueue::IpcQueue(IpcQueuePrivate *priv) : private_(priv){}; IpcQueue::~IpcQueue() = default; -std::variant IpcQueue::tryReplaceOrCreate( +std::pair, QString> IpcQueue::tryReplaceOrCreate( const char *name, size_t maxMessages, size_t maxMessageSize) { try { boost_ipc::message_queue::remove(name); - return IpcQueue(new IpcQueuePrivate(name, maxMessages, maxMessageSize)); + return std::make_pair( + std::unique_ptr(new IpcQueue( + new IpcQueuePrivate(name, maxMessages, maxMessageSize))), + QString()); } catch (boost_ipc::interprocess_exception &ex) { - return QString::fromLatin1(ex.what()); + return {nullptr, QString::fromLatin1(ex.what())}; } } diff --git a/src/util/IpcQueue.hpp b/src/util/IpcQueue.hpp index c473f1780dc..467aa287328 100644 --- a/src/util/IpcQueue.hpp +++ b/src/util/IpcQueue.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include class QByteArray; class QString; @@ -16,7 +16,7 @@ class IpcQueue public: ~IpcQueue(); - static std::variant tryReplaceOrCreate( + static std::pair, QString> tryReplaceOrCreate( const char *name, size_t maxMessages, size_t maxMessageSize); // TODO: use std::expected