From 86e109baf5031e19b7d17221a4e31c2e25ab668a Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Tue, 10 Jun 2025 21:05:14 -0400 Subject: [PATCH] refactor: use std::mutex in ArchNetworkWinSock --- src/lib/arch/win32/ArchNetworkWinsock.cpp | 30 +++++++++-------------- src/lib/arch/win32/ArchNetworkWinsock.h | 5 ++-- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/lib/arch/win32/ArchNetworkWinsock.cpp b/src/lib/arch/win32/ArchNetworkWinsock.cpp index f82ab572a..24c999c7c 100644 --- a/src/lib/arch/win32/ArchNetworkWinsock.cpp +++ b/src/lib/arch/win32/ArchNetworkWinsock.cpp @@ -82,10 +82,6 @@ ArchNetAddressImpl *ArchNetAddressImpl::alloc(size_t size) // ArchNetworkWinsock // -ArchNetworkWinsock::ArchNetworkWinsock() : m_mutex(nullptr) -{ -} - ArchNetworkWinsock::~ArchNetworkWinsock() { if (s_networkModule != nullptr) { @@ -95,9 +91,6 @@ ArchNetworkWinsock::~ArchNetworkWinsock() WSACleanup_winsock = nullptr; s_networkModule = nullptr; } - if (m_mutex != nullptr) { - ARCH->closeMutex(m_mutex); - } EventList::iterator it; for (it = m_unblockEvents.begin(); it != m_unblockEvents.end(); it++) { @@ -116,7 +109,6 @@ void ArchNetworkWinsock::init() for (size_t i = 0; i < sizeof(s_library) / sizeof(s_library[0]); ++i) { try { initModule((HMODULE)::LoadLibrary(s_library[i])); - m_mutex = ARCH->newMutex(); return; } catch (XArchNetwork &) { // ignore @@ -233,9 +225,8 @@ ArchSocket ArchNetworkWinsock::copySocket(ArchSocket s) assert(s != nullptr); // ref the socket and return it - ARCH->lockMutex(m_mutex); + std::lock_guard lock(m_mutex); ++s->m_refCount; - ARCH->unlockMutex(m_mutex); return s; } @@ -244,18 +235,21 @@ void ArchNetworkWinsock::closeSocket(ArchSocket s) assert(s != nullptr); // unref the socket and note if it should be released - ARCH->lockMutex(m_mutex); - const bool doClose = (--s->m_refCount == 0); - ARCH->unlockMutex(m_mutex); + bool doClose = false; + { + std::lock_guard lock(m_mutex); + doClose = (--s->m_refCount == 0); + } // close the socket if necessary if (doClose) { if (close_winsock(s->m_socket) == SOCKET_ERROR) { // close failed. restore the last ref and throw. int err = getsockerror_winsock(); - ARCH->lockMutex(m_mutex); - ++s->m_refCount; - ARCH->unlockMutex(m_mutex); + { + std::lock_guard lock(m_mutex); + ++s->m_refCount; + } throwError(err); } WSACloseEvent_winsock(s->m_event); @@ -690,9 +684,8 @@ std::vector ArchNetworkWinsock::nameToAddr(const std::string &na hints.ai_family = AF_UNSPEC; int ret = -1; - ARCH->lockMutex(m_mutex); + std::lock_guard lock(m_mutex); if ((ret = getaddrinfo(name.c_str(), nullptr, &hints, &pResult)) != 0) { - ARCH->unlockMutex(m_mutex); throwNameError(ret); } @@ -708,7 +701,6 @@ std::vector ArchNetworkWinsock::nameToAddr(const std::string &na } freeaddrinfo(pResult); - ARCH->unlockMutex(m_mutex); return addresses; } diff --git a/src/lib/arch/win32/ArchNetworkWinsock.h b/src/lib/arch/win32/ArchNetworkWinsock.h index 072469e49..caa5c058c 100644 --- a/src/lib/arch/win32/ArchNetworkWinsock.h +++ b/src/lib/arch/win32/ArchNetworkWinsock.h @@ -21,6 +21,7 @@ #define WIN32_LEAN_AND_MEAN #include #include +#include #pragma comment(lib, "ws2_32.lib") @@ -51,7 +52,7 @@ public: class ArchNetworkWinsock : public IArchNetwork { public: - ArchNetworkWinsock(); + ArchNetworkWinsock() = default; ~ArchNetworkWinsock() override; void init() override; @@ -97,6 +98,6 @@ private: private: using EventList = std::list; - ArchMutex m_mutex; + std::mutex m_mutex; EventList m_unblockEvents; };