From ca2c0462abe3c40ba94033ef61763f0608b4f254 Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Wed, 28 Jun 2023 10:33:12 +0100 Subject: [PATCH] [*] Continue to refactor allocations of synchronization primitive away [*] NT: Fix missing CoTaskMemFree leak on startup [*] Fix ConsoleStd restart bug --- Source/AuRTEntrypoint.cpp | 4 ++++ Source/CmdLine/CmdLine.cpp | 9 +++++++++ Source/CmdLine/CmdLine.hpp | 1 + Source/Console/Commands/Commands.cpp | 4 ++-- Source/Console/ConsoleStd/ConsoleStd.cpp | 4 +++- Source/Console/ConsoleTTY/ConsoleTTY.NT.cpp | 2 +- Source/Console/ConsoleTTY/ConsoleTTY.cpp | 9 +++++++-- Source/Console/ConsoleTTY/ConsoleTTY.hpp | 2 +- .../ConsoleWxWidgets/ConsoleWxWidgets.cpp | 5 +---- Source/Exit/AuExit.cpp | 5 +---- Source/Grug/AuGrug.cpp | 20 +++---------------- Source/IO/AuIOProcessorItems.cpp | 5 +---- Source/IO/AuIOProcessorItems.hpp | 4 ++-- Source/IO/FS/Resources.cpp | 17 +++++++++++++++- Source/IO/FS/Resources.hpp | 3 ++- Source/IO/Net/AuNetSrvWorkers.cpp | 9 ++++----- Source/IO/Net/AuNetSrvWorkers.hpp | 3 +-- .../AuNetDatagramSocketServer.cpp | 3 +-- .../AuNetDatagramSocketServer.hpp | 2 +- Source/Logging/Sinks/FileSink.cpp | 3 +-- Source/Logging/Sinks/FileSink.hpp | 2 +- Source/Logging/Sinks/IPCSink.cpp | 3 +-- Source/Logging/Sinks/IPCSink.hpp | 2 +- Source/Logging/Sinks/RingBuffer.cpp | 5 ++--- Source/Logging/Sinks/RingBuffer.hpp | 2 +- Source/Memory/Heap.cpp | 10 ++-------- Source/Process/AuProcessMap.NT.cpp | 4 +--- Source/Process/AuProcessMap.cpp | 6 +----- Source/Processes/AuOpen.Win32.cpp | 12 ++--------- 29 files changed, 74 insertions(+), 86 deletions(-) diff --git a/Source/AuRTEntrypoint.cpp b/Source/AuRTEntrypoint.cpp index 6b6846e5..7f6b69a3 100644 --- a/Source/AuRTEntrypoint.cpp +++ b/Source/AuRTEntrypoint.cpp @@ -15,6 +15,7 @@ #include "Locale/Locale.hpp" #include "Console/Console.hpp" #include "IO/FS/FS.hpp" +#include "IO/FS/Resources.hpp" #include "IO/IO.hpp" #include "IO/Net/Net.hpp" #include "Hashing/AuHashing.hpp" @@ -158,6 +159,9 @@ static void RuntimeLateClean() Aurora::IO::Deinit(); Aurora::Exit::DeinitExit(); + Aurora::IO::FS::DeinitResources(); + Aurora::CmdLine::Deinit(); + Aurora::RNG::Release(); // RNG and crypto should remain alive whilst IO work is ongoing. // At this point, we should assume libtomcrypt and mbedtls wont be called // The default gFastDevice shouldn't be hit for any reason diff --git a/Source/CmdLine/CmdLine.cpp b/Source/CmdLine/CmdLine.cpp index 55a07245..e1aea6f2 100644 --- a/Source/CmdLine/CmdLine.cpp +++ b/Source/CmdLine/CmdLine.cpp @@ -142,4 +142,13 @@ namespace Aurora::CmdLine ProcessArgs(); } + + void Deinit() + { + gCmdFlags.clear(); + gCmdValues.clear(); + gCmdValueMap.clear(); + gCmdFlagLookup.clear(); + gCmdLineString.clear(); + } } \ No newline at end of file diff --git a/Source/CmdLine/CmdLine.hpp b/Source/CmdLine/CmdLine.hpp index 3f1952b2..cecf2986 100644 --- a/Source/CmdLine/CmdLine.hpp +++ b/Source/CmdLine/CmdLine.hpp @@ -10,4 +10,5 @@ namespace Aurora::CmdLine { void Init(); + void Deinit(); } \ No newline at end of file diff --git a/Source/Console/Commands/Commands.cpp b/Source/Console/Commands/Commands.cpp index e609cb6c..a5cc1285 100644 --- a/Source/Console/Commands/Commands.cpp +++ b/Source/Console/Commands/Commands.cpp @@ -16,8 +16,8 @@ namespace Aurora::Console::Commands static AuHashMap gCommands; static AuList gLineCallbacks; static AuList gPendingCommands; - static auto gMutex = AuThreadPrimitives::MutexUnique(); - static auto gPendingCommandsMutex = AuThreadPrimitives::MutexUnique(); + static AuThreadPrimitives::Mutex gMutex; + static AuThreadPrimitives::Mutex gPendingCommandsMutex; static Async::WorkerPId_t gCommandDispatcher; struct Command diff --git a/Source/Console/ConsoleStd/ConsoleStd.cpp b/Source/Console/ConsoleStd/ConsoleStd.cpp index 576fb36a..16fb7fe8 100755 --- a/Source/Console/ConsoleStd/ConsoleStd.cpp +++ b/Source/Console/ConsoleStd/ConsoleStd.cpp @@ -755,9 +755,10 @@ namespace Aurora::Console::ConsoleStd Console::AddDefaultLogger(AuUnsafeRaiiToShared(&Logging::Sinks::gStdConsoleSink)); } + static bool gConsoleStarted = false; + void Start() { - static bool gConsoleStarted = false; if (AuExchange(gConsoleStarted, true)) return; #if defined(AURORA_IS_MODERNNT_DERIVED) @@ -1594,6 +1595,7 @@ namespace Aurora::Console::ConsoleStd AuWin32CloseHandle(gOutputStream); #endif + gConsoleStarted = false; #endif } diff --git a/Source/Console/ConsoleTTY/ConsoleTTY.NT.cpp b/Source/Console/ConsoleTTY/ConsoleTTY.NT.cpp index dfb123c8..b3dd91da 100644 --- a/Source/Console/ConsoleTTY/ConsoleTTY.NT.cpp +++ b/Source/Console/ConsoleTTY/ConsoleTTY.NT.cpp @@ -16,7 +16,7 @@ namespace Aurora::Console::ConsoleTTY static COORD gSavedCoord {}; static bool gIsRecording {}; - static AuThreadPrimitives::SpinLock gRecordLock; + static AuThreadPrimitives::Mutex gRecordLock; static AuList> gRecordedActions {}; struct Console diff --git a/Source/Console/ConsoleTTY/ConsoleTTY.cpp b/Source/Console/ConsoleTTY/ConsoleTTY.cpp index 71586144..62d699c8 100644 --- a/Source/Console/ConsoleTTY/ConsoleTTY.cpp +++ b/Source/Console/ConsoleTTY/ConsoleTTY.cpp @@ -310,7 +310,6 @@ namespace Aurora::Console::ConsoleTTY void TTYConsole::Init() { - this->historyLock = AuThreadPrimitives::RWLockUnique(); this->HistorySetFile(); this->HistoryLoad(); } @@ -2329,9 +2328,14 @@ namespace Aurora::Console::ConsoleTTY void Init() { + if (!gRuntimeConfig.console.enableConsole) + { + return; + } + gTTYConsole.Init(); - if (gMultiThreadTTY) + if (gMultiThreadTTY && !gConsoleTTYThread) { gConsoleTTYThread = AuThreads::ThreadUnique(AuThreads::ThreadInfo( AuMakeShared(AuThreads::IThreadVectorsFunctional::OnEntry_t(std::bind(MainTTY)), @@ -2377,6 +2381,7 @@ namespace Aurora::Console::ConsoleTTY void PumpForce() { + // no more force deinit for.now: gConsoleTTYThread.reset(); gTTYConsole.Pump(); diff --git a/Source/Console/ConsoleTTY/ConsoleTTY.hpp b/Source/Console/ConsoleTTY/ConsoleTTY.hpp index 943d1d0c..47f859f3 100644 --- a/Source/Console/ConsoleTTY/ConsoleTTY.hpp +++ b/Source/Console/ConsoleTTY/ConsoleTTY.hpp @@ -229,7 +229,7 @@ namespace Aurora::Console::ConsoleTTY int iHistoryWritePos {0}; AuList history; - AuThreadPrimitives::RWLockUnique_t historyLock; + AuThreadPrimitives::RWLock historyLock; AuThreadPrimitives::SpinLock messageLock; diff --git a/Source/Console/ConsoleWxWidgets/ConsoleWxWidgets.cpp b/Source/Console/ConsoleWxWidgets/ConsoleWxWidgets.cpp index 0a368486..e9f24110 100644 --- a/Source/Console/ConsoleWxWidgets/ConsoleWxWidgets.cpp +++ b/Source/Console/ConsoleWxWidgets/ConsoleWxWidgets.cpp @@ -26,7 +26,7 @@ class ConsoleFrame; static AuList gPendingLines; -static AuThreadPrimitives::MutexUnique_t gMutex; +static AuThreadPrimitives::Mutex gMutex; static bool gWxConsoleReady; static bool gConsoleStarted = false; static ConsoleFrame *gWxFrame; @@ -771,9 +771,6 @@ namespace Aurora::Console::ConsoleWxWidgets { if (AuExchange(gConsoleStarted, true)) return; - gMutex = AuThreadPrimitives::MutexUnique(); - if (!gMutex) return; - Aurora::Console::Hooks::AddSubscription(AuUnsafeRaiiToShared(&gConsoleMessageSubscriber)); gWxWidgetsThread = AuThreads::ThreadUnique(AuThreads::ThreadInfo( diff --git a/Source/Exit/AuExit.cpp b/Source/Exit/AuExit.cpp index d388cd05..26e64851 100644 --- a/Source/Exit/AuExit.cpp +++ b/Source/Exit/AuExit.cpp @@ -18,7 +18,7 @@ namespace Aurora::Exit { - static AuThreadPrimitives::MutexUnique_t gMutex; + static AuThreadPrimitives::Mutex gMutex; static AuList, ETriggerLevel>> gTriggerSubscribers; static bool gIsAppRunning {true}; @@ -186,7 +186,6 @@ namespace Aurora::Exit void InitExit() { - gMutex = AuThreadPrimitives::MutexUnique(); InitWatchdog(); #if defined(AURORA_IS_POSIX_DERIVED) @@ -203,7 +202,5 @@ namespace Aurora::Exit #if defined(AURORA_IS_POSIX_DERIVED) DeinitUnix(); #endif - - gMutex.reset(); } } \ No newline at end of file diff --git a/Source/Grug/AuGrug.cpp b/Source/Grug/AuGrug.cpp index 65014440..c9c2bc13 100644 --- a/Source/Grug/AuGrug.cpp +++ b/Source/Grug/AuGrug.cpp @@ -31,9 +31,9 @@ namespace Aurora::Grug static const auto kGrugFlushMs = 500; static AuThreads::ThreadUnique_t gGrugsBigWorld; - static AuThreadPrimitives::ConditionVariableUnique_t gCondVar; // slow logger work queue - static AuThreadPrimitives::ConditionMutexUnique_t gMutex; // ^ that - static AuThreadPrimitives::SemaphoreUnique_t gArrows; + static AuThreadPrimitives::ConditionMutex gMutex; // ^ that + static AuThreadPrimitives::ConditionVariable gCondVar(AuUnsafeRaiiToShared(gMutex.AsPointer())); // slow logger work queue + static AuThreadPrimitives::Semaphore gArrows; static void SlowStartupTasks() { @@ -130,16 +130,6 @@ namespace Aurora::Grug void InitGrug() { - gMutex = AuThreadPrimitives::ConditionMutexUnique(); - SysAssert(gMutex, "Couldn't allocate a unique condition variable mutex for grug"); - - auto shared = AuUnsafeRaiiToShared(gMutex); - gCondVar = AuThreadPrimitives::ConditionVariableUnique(shared); - SysAssert(gCondVar, "Couldn't allocate a unique condition variable for grug"); - - gArrows = AuThreadPrimitives::SemaphoreUnique(); - SysAssert(gArrows, "Couldn't allocate an arrow counter for grug"); - InitFlushThread(); } @@ -152,10 +142,6 @@ namespace Aurora::Grug GrugFlushWrites(); GrugFlushFlushs(); - - gMutex.reset(); - gCondVar.reset(); - gArrows.reset(); DeinitArrows(); } diff --git a/Source/IO/AuIOProcessorItems.cpp b/Source/IO/AuIOProcessorItems.cpp index 29bf7f63..1aa8805f 100644 --- a/Source/IO/AuIOProcessorItems.cpp +++ b/Source/IO/AuIOProcessorItems.cpp @@ -15,12 +15,9 @@ namespace Aurora::IO { bool IOProcessorItems::Init() { - this->mutex = AuThreadPrimitives::CriticalSectionUnique(); - this->mutex2 = AuThreadPrimitives::CriticalSectionUnique(); - this->cvEvent = AuLoop::NewLSEvent(false, true, true); - return bool(this->mutex) && bool(this->mutex2); + return bool(this->cvEvent); } bool IOProcessorItems::AddFrameTemp(const AuSPtr &item) diff --git a/Source/IO/AuIOProcessorItems.hpp b/Source/IO/AuIOProcessorItems.hpp index e9c898fc..39508a3d 100644 --- a/Source/IO/AuIOProcessorItems.hpp +++ b/Source/IO/AuIOProcessorItems.hpp @@ -22,9 +22,9 @@ namespace Aurora::IO AuList> registeredIO; - AuThreadPrimitives::CriticalSectionUnique_t mutex; + AuThreadPrimitives::CriticalSection mutex; AuList> workSignaled; - AuThreadPrimitives::CriticalSectionUnique_t mutex2; + AuThreadPrimitives::CriticalSection mutex2; AuList> workSignaled2; AuList> finalizeQueue; diff --git a/Source/IO/FS/Resources.cpp b/Source/IO/FS/Resources.cpp index c8c4f659..b27d4f55 100644 --- a/Source/IO/FS/Resources.cpp +++ b/Source/IO/FS/Resources.cpp @@ -123,7 +123,10 @@ namespace Aurora::IO::FS SysPanic("Couldn't get known special directory path of [MS:{}-{}-{}-{}{}{}{}{}{}{}{}] with a NULL access token", rfid.Data1, rfid.Data2, rfid.Data3, rfid.Data4[0], rfid.Data4[1], rfid.Data4[2], rfid.Data4[3], rfid.Data4[4], rfid.Data4[5], rfid.Data4[6], rfid.Data4[7]); } - return Locale::ConvertFromWChar(directory); + + auto ret = Locale::ConvertFromWChar(directory); + CoTaskMemFree(directory); + return ret; } static void SetNamespaceDirectories() @@ -300,10 +303,22 @@ namespace Aurora::IO::FS void InitResources() { + DeinitResources(); SetNamespaceDirectories(); ChangeDir(); } + void DeinitResources() + { + gHomeDirectory.clear(); + gUserHomeDirectory.clear(); + gUserWritableAppData.clear(); + gGlobalWritableAppDirectory.clear(); + gAdminWritableAppDirectory.clear(); + gProgramsFolder.clear(); + gApplicationData.clear(); + } + AUKN_SYM bool GetAppData(AuString &path) { path.clear(); diff --git a/Source/IO/FS/Resources.hpp b/Source/IO/FS/Resources.hpp index 1e27e2e6..83d4cb0e 100644 --- a/Source/IO/FS/Resources.hpp +++ b/Source/IO/FS/Resources.hpp @@ -13,6 +13,7 @@ namespace Aurora::IO::FS AuOptional GetSystemLibPath(); AuOptional GetUserLibPath2(); AuOptional GetSystemLibPath2(); - + void InitResources(); + void DeinitResources(); } \ No newline at end of file diff --git a/Source/IO/Net/AuNetSrvWorkers.cpp b/Source/IO/Net/AuNetSrvWorkers.cpp index aa176cef..c82f0fe7 100644 --- a/Source/IO/Net/AuNetSrvWorkers.cpp +++ b/Source/IO/Net/AuNetSrvWorkers.cpp @@ -13,13 +13,12 @@ namespace Aurora::IO::Net { NetSrvWorkers::NetSrvWorkers() { - this->pCondVar_ = AuThreadPrimitives::CriticalSectionUnique(); - SysAssert(this->pCondVar_); + } AuSPtr NetSrvWorkers::Attach(const AuSPtr &processor) { - AU_LOCK_GUARD(this->spinLock_); + AU_LOCK_GUARD(this->mutex_); auto worker = AuMakeShared(this, this->workerPool_.size(), processor); @@ -45,7 +44,7 @@ namespace Aurora::IO::Net void NetSrvWorkers::RemoveCache(NetWorker *worker) { - AU_LOCK_GUARD(this->spinLock_); + AU_LOCK_GUARD(this->mutex_); for (AuUInt i = 0; i < this->workerPool_.size(); i++) @@ -63,7 +62,7 @@ namespace Aurora::IO::Net AuSPtr NetSrvWorkers::GetWorkerByIndex(AuUInt index) { - AU_LOCK_GUARD(this->spinLock_); + AU_LOCK_GUARD(this->mutex_); return this->workerPool_[index % this->workerPool_.size()]; } diff --git a/Source/IO/Net/AuNetSrvWorkers.hpp b/Source/IO/Net/AuNetSrvWorkers.hpp index 9cf54cb0..c58936ca 100644 --- a/Source/IO/Net/AuNetSrvWorkers.hpp +++ b/Source/IO/Net/AuNetSrvWorkers.hpp @@ -24,8 +24,7 @@ namespace Aurora::IO::Net AuSPtr GetWorkerByIndexSafe(AuUInt index) override; private: - AuThreadPrimitives::CriticalSectionUnique_t pCondVar_; AuList> workerPool_; - AuThreadPrimitives::SpinLock spinLock_; + AuThreadPrimitives::Mutex mutex_; }; } \ No newline at end of file diff --git a/Source/IO/Net/SocketOverDatagram/AuNetDatagramSocketServer.cpp b/Source/IO/Net/SocketOverDatagram/AuNetDatagramSocketServer.cpp index 9a552a01..c30cd06e 100644 --- a/Source/IO/Net/SocketOverDatagram/AuNetDatagramSocketServer.cpp +++ b/Source/IO/Net/SocketOverDatagram/AuNetDatagramSocketServer.cpp @@ -45,8 +45,7 @@ namespace Aurora::IO::Net bool NetDatagramSocketServer::Init() { - this->mutex_ = AuThreadPrimitives::MutexUnique(); - return bool(this->mutex_); + return true; } void NetDatagramSocketServer::Start(const NetEndpoint &local) diff --git a/Source/IO/Net/SocketOverDatagram/AuNetDatagramSocketServer.hpp b/Source/IO/Net/SocketOverDatagram/AuNetDatagramSocketServer.hpp index 290b8512..29b8adb6 100644 --- a/Source/IO/Net/SocketOverDatagram/AuNetDatagramSocketServer.hpp +++ b/Source/IO/Net/SocketOverDatagram/AuNetDatagramSocketServer.hpp @@ -81,6 +81,6 @@ namespace Aurora::IO::Net AuSPtr pDatagramServer_; AuSPtr pSocketDriverFactory_; NetDatagramSocketEviction eviction; - AuThreadPrimitives::MutexUnique_t mutex_; + AuThreadPrimitives::Mutex mutex_; }; } \ No newline at end of file diff --git a/Source/Logging/Sinks/FileSink.cpp b/Source/Logging/Sinks/FileSink.cpp index 41c6a270..eef19f98 100644 --- a/Source/Logging/Sinks/FileSink.cpp +++ b/Source/Logging/Sinks/FileSink.cpp @@ -19,9 +19,8 @@ namespace Aurora::Logging::Sinks bool FIOSink::Init() { - this->logMutex_ = AuThreadPrimitives::MutexUnique(); this->file_ = AuIOFS::OpenWriteUnique(this->path_); - return static_cast(this->file_) && static_cast(this->logMutex_); + return static_cast(this->file_); } void FIOSink::OnMessageBlocking(AuUInt8 uLevel, const ConsoleMessage &msg) diff --git a/Source/Logging/Sinks/FileSink.hpp b/Source/Logging/Sinks/FileSink.hpp index 9a0a8756..73287931 100644 --- a/Source/Logging/Sinks/FileSink.hpp +++ b/Source/Logging/Sinks/FileSink.hpp @@ -26,7 +26,7 @@ namespace Aurora::Logging::Sinks AuIOFS::OpenWriteUnique_t file_; bool bBinary_; AuByteBuffer logBuffer_; - AuThreadPrimitives::MutexUnique_t logMutex_; + AuThreadPrimitives::Mutex logMutex_; ADD_FORMATTER_CONTAINER; }; diff --git a/Source/Logging/Sinks/IPCSink.cpp b/Source/Logging/Sinks/IPCSink.cpp index 591aacae..adf2b545 100644 --- a/Source/Logging/Sinks/IPCSink.cpp +++ b/Source/Logging/Sinks/IPCSink.cpp @@ -17,8 +17,7 @@ namespace Aurora::Logging::Sinks bool IPCSink::Init() { - this->logMutex_ = AuThreadPrimitives::MutexUnique(); - return static_cast(this->pipe_) && static_cast(this->logMutex_); + return static_cast(this->pipe_); } AuSPtr IPCSink::ToPipe() diff --git a/Source/Logging/Sinks/IPCSink.hpp b/Source/Logging/Sinks/IPCSink.hpp index de1341e7..e7c317eb 100644 --- a/Source/Logging/Sinks/IPCSink.hpp +++ b/Source/Logging/Sinks/IPCSink.hpp @@ -24,7 +24,7 @@ namespace Aurora::Logging::Sinks private: AuSPtr pipe_; AuByteBuffer logBuffer_; - AuThreadPrimitives::MutexUnique_t logMutex_; + AuThreadPrimitives::Mutex logMutex_; bool lengthPrefixed_; }; diff --git a/Source/Logging/Sinks/RingBuffer.cpp b/Source/Logging/Sinks/RingBuffer.cpp index 60a03d32..f3006343 100644 --- a/Source/Logging/Sinks/RingBuffer.cpp +++ b/Source/Logging/Sinks/RingBuffer.cpp @@ -17,9 +17,8 @@ namespace Aurora::Logging::Sinks bool RingBufferSink::Init() { - this->logMutex_ = AuThreadPrimitives::MutexUnique(); - this->logBuffer_.reserve(maxCount_); - return static_cast(this->logMutex_); + AuTryReserve(this->logBuffer_, this->maxCount_); + return true; } void RingBufferSink::OnMessageBlocking(AuUInt8 level, const ConsoleMessage &msg) diff --git a/Source/Logging/Sinks/RingBuffer.hpp b/Source/Logging/Sinks/RingBuffer.hpp index c2c0cb31..fdce8225 100644 --- a/Source/Logging/Sinks/RingBuffer.hpp +++ b/Source/Logging/Sinks/RingBuffer.hpp @@ -27,7 +27,7 @@ namespace Aurora::Logging::Sinks AuUInt32 maxCount_; AuUInt32 index_; AuList logBuffer_; - AuThreadPrimitives::MutexUnique_t logMutex_; + AuThreadPrimitives::Mutex logMutex_; }; void NewRingBufferRelease(IBasicSink *logger); diff --git a/Source/Memory/Heap.cpp b/Source/Memory/Heap.cpp index f654d4cb..0c19c181 100644 --- a/Source/Memory/Heap.cpp +++ b/Source/Memory/Heap.cpp @@ -57,7 +57,7 @@ namespace Aurora::Memory { virtual AuSPtr AllocateDivision(AuUInt32 heap, AuUInt32 alignment) override; - InternalHeap() : mutex_(nullptr), heap_(nullptr), count_(0) + InternalHeap() : heap_(nullptr), count_(0) { } virtual ~InternalHeap(); @@ -99,7 +99,7 @@ namespace Aurora::Memory private: - AuThreadPrimitives::MutexUnique_t mutex_; + AuThreadPrimitives::Mutex mutex_; O1HeapInstance *heap_ {}; int count_ {}; @@ -146,21 +146,15 @@ namespace Aurora::Memory this->base_ = nullptr; } } - - this->mutex_.reset(); } bool InternalHeap::Init(AuUInt length, void *ptr) { SysAssert(!this->base_, "heap already initialized"); - SysAssert(!this->mutex_, "heap already initialized"); SysAssert(length, "invalid heap allocation"); this->length_ = length; - this->mutex_ = AuThreadPrimitives::MutexUnique(); - if (!this->mutex_) return false; - if (ptr) { this->base_ = ptr; diff --git a/Source/Process/AuProcessMap.NT.cpp b/Source/Process/AuProcessMap.NT.cpp index 6c832f7e..22944d79 100644 --- a/Source/Process/AuProcessMap.NT.cpp +++ b/Source/Process/AuProcessMap.NT.cpp @@ -11,7 +11,7 @@ namespace Aurora::Process { - static AuThreadPrimitives::MutexUnique_t gMutex; + static AuThreadPrimitives::Mutex gMutex; static AuBST gPathCache; static AuBST gModNameCache; @@ -311,11 +311,9 @@ namespace Aurora::Process void InitProcessMapNt() { - gMutex = AuThreadPrimitives::MutexUnique(); } void DeinitProcessMapNt() { - gMutex.reset(); } } \ No newline at end of file diff --git a/Source/Process/AuProcessMap.cpp b/Source/Process/AuProcessMap.cpp index 06742a47..86498828 100644 --- a/Source/Process/AuProcessMap.cpp +++ b/Source/Process/AuProcessMap.cpp @@ -62,7 +62,7 @@ namespace Aurora::Process static const auto kMinPageAlignment = 4096; static const auto kPageBufferPad = 20; - static AuThreadPrimitives::MutexUnique_t gMutexUnique; + static AuThreadPrimitives::Mutex gMutexUnique; static AuHashMap, ModuleBasePairHash, // TODO: this precede auhashcode @@ -175,8 +175,6 @@ namespace Aurora::Process void InitProcessMap() { - gMutexUnique = AuThreadPrimitives::MutexUnique(); - #if defined(AURORA_IS_MODERNNT_DERIVED) InitProcessMapNt(); #endif @@ -202,8 +200,6 @@ namespace Aurora::Process void DeinitProcessMap() { - gMutexUnique.reset(); - #if defined(AURORA_IS_MODERNNT_DERIVED) DeinitProcessMapNt(); #endif diff --git a/Source/Processes/AuOpen.Win32.cpp b/Source/Processes/AuOpen.Win32.cpp index f724ef35..bfcc285d 100644 --- a/Source/Processes/AuOpen.Win32.cpp +++ b/Source/Processes/AuOpen.Win32.cpp @@ -19,8 +19,8 @@ namespace Aurora::Processes { static AuList gOpenItems; - static AuThreadPrimitives::ConditionMutexUnique_t gCondMutex; - static AuThreadPrimitives::ConditionVariableUnique_t gCondVariable; + static AuThreadPrimitives::ConditionMutex gCondMutex; + static AuThreadPrimitives::ConditionVariable gCondVariable(AuUnsafeRaiiToShared(gCondMutex.AsPointer())); static AuThreads::ThreadUnique_t gOpenerThread; static void RunTasks() @@ -62,12 +62,6 @@ namespace Aurora::Processes void InitWin32Opener() { - gCondMutex = AuThreadPrimitives::ConditionMutexUnique(); - SysAssert(gCondMutex); - - gCondVariable = AuThreadPrimitives::ConditionVariableUnique(AuUnsafeRaiiToShared(gCondMutex)); - SysAssert(gCondVariable); - gOpenerThread = AuThreads::ThreadUnique(AuThreads::ThreadInfo( AuMakeShared(AuThreads::IThreadVectorsFunctional::OnEntry_t(std::bind(OpenerThread)), AuThreads::IThreadVectorsFunctional::OnExit_t{}), @@ -83,8 +77,6 @@ namespace Aurora::Processes gOpenerThread->SendExitSignal(); gCondVariable->Broadcast(); gOpenerThread.reset(); - gCondVariable.reset(); - gCondMutex.reset(); } AUKN_SYM void OpenUri(const AuString &uri)