diff options
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/Collision/Management/VMapManager.cpp | 4 | ||||
| -rw-r--r-- | src/common/Configuration/Config.cpp | 10 | ||||
| -rw-r--r-- | src/common/Threading/LockedQueue.h | 18 | ||||
| -rw-r--r-- | src/common/Threading/ProducerConsumerQueue.h | 21 | ||||
| -rw-r--r-- | src/common/network/Http/HttpService.cpp | 16 | ||||
| -rw-r--r-- | src/common/network/NetworkThread.h | 4 |
6 files changed, 35 insertions, 38 deletions
diff --git a/src/common/Collision/Management/VMapManager.cpp b/src/common/Collision/Management/VMapManager.cpp index 57d68708f46..98137de183d 100644 --- a/src/common/Collision/Management/VMapManager.cpp +++ b/src/common/Collision/Management/VMapManager.cpp @@ -273,7 +273,7 @@ namespace VMAP std::shared_ptr<ManagedModel> worldmodel; // this is intentionally declared before lock so that it is destroyed after it to prevent deadlocks in releaseModelInstance //! Critical section, thread safe access to iLoadedModelFiles - std::lock_guard lock(LoadedModelFilesLock); + std::scoped_lock lock(LoadedModelFilesLock); auto& [key, model] = *iLoadedModelFiles.try_emplace(filename).first; worldmodel = model.lock(); @@ -296,7 +296,7 @@ namespace VMAP void VMapManager::releaseModelInstance(std::string const& filename) { //! Critical section, thread safe access to iLoadedModelFiles - std::lock_guard lock(LoadedModelFilesLock); + std::scoped_lock lock(LoadedModelFilesLock); TC_LOG_DEBUG("maps", "VMapManager: unloading file '{}'", filename); diff --git a/src/common/Configuration/Config.cpp b/src/common/Configuration/Config.cpp index 946ff676e6f..11f78f7c0af 100644 --- a/src/common/Configuration/Config.cpp +++ b/src/common/Configuration/Config.cpp @@ -137,7 +137,7 @@ namespace bool ConfigMgr::LoadInitial(std::string file, std::vector<std::string> args, std::string& error) { - std::lock_guard<std::mutex> lock(_configLock); + std::scoped_lock lock(_configLock); _filename = std::move(file); _args = std::move(args); @@ -158,7 +158,7 @@ bool ConfigMgr::LoadAdditionalFile(std::string file, bool keepOnReload, std::str if (!LoadFile(file, fullTree, error)) return false; - std::lock_guard<std::mutex> lock(_configLock); + std::scoped_lock lock(_configLock); for (bpt::ptree::value_type const& child : fullTree.begin()->second) _config.put_child(bpt::ptree::path_type(child.first, '/'), child.second); @@ -197,7 +197,7 @@ bool ConfigMgr::LoadAdditionalDir(std::string const& dir, bool keepOnReload, std std::vector<std::string> ConfigMgr::OverrideWithEnvVariablesIfAny() { - std::lock_guard<std::mutex> lock(_configLock); + std::scoped_lock lock(_configLock); std::vector<std::string> overriddenKeys; @@ -346,7 +346,7 @@ float ConfigMgr::GetFloatDefault(std::string_view name, float def, bool quiet) c std::string const& ConfigMgr::GetFilename() { - std::lock_guard<std::mutex> lock(_configLock); + std::scoped_lock lock(_configLock); return _filename; } @@ -357,7 +357,7 @@ std::vector<std::string> const& ConfigMgr::GetArguments() const std::vector<std::string> ConfigMgr::GetKeysByString(std::string const& name) { - std::lock_guard<std::mutex> lock(_configLock); + std::scoped_lock lock(_configLock); std::vector<std::string> keys; diff --git a/src/common/Threading/LockedQueue.h b/src/common/Threading/LockedQueue.h index 25666db9358..4a97da0c726 100644 --- a/src/common/Threading/LockedQueue.h +++ b/src/common/Threading/LockedQueue.h @@ -39,14 +39,14 @@ public: //! Adds an item to the queue. void add(T const& item) { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); _queue.push_back(item); } //! Adds an item to the queue. void add(T&& item) { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); _queue.push_back(std::move(item)); } @@ -54,14 +54,14 @@ public: template<std::input_iterator Iterator> void readd(Iterator begin, Iterator end) { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); _queue.insert(_queue.begin(), begin, end); } //! Gets the next result in the queue, if any. bool next(T& result) { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); if (_queue.empty()) return false; @@ -73,7 +73,7 @@ public: template<class Checker> bool next(T& result, Checker& check) { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); if (_queue.empty()) return false; @@ -89,28 +89,28 @@ public: //! Cancels the queue. void cancel() { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); _canceled = true; } //! Checks if the queue is cancelled. bool cancelled() { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); return _canceled; } ///! Calls pop_front of the queue void pop_front() { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); _queue.pop_front(); } ///! Checks if we're empty or not with locks held bool empty() { - std::lock_guard<std::mutex> lock(_lock); + std::scoped_lock lock(_lock); return _queue.empty(); } }; diff --git a/src/common/Threading/ProducerConsumerQueue.h b/src/common/Threading/ProducerConsumerQueue.h index 04c2017c1f7..7efa24cb78c 100644 --- a/src/common/Threading/ProducerConsumerQueue.h +++ b/src/common/Threading/ProducerConsumerQueue.h @@ -18,10 +18,10 @@ #ifndef TRINITY_PRODUCER_CONSUMER_QUEUE_H #define TRINITY_PRODUCER_CONSUMER_QUEUE_H +#include <atomic> #include <condition_variable> #include <mutex> #include <queue> -#include <atomic> #include <type_traits> template <typename T> @@ -39,7 +39,7 @@ public: void Push(T const& value) { - std::lock_guard<std::mutex> lock(_queueLock); + std::scoped_lock lock(_queueLock); _queue.push(value); _condition.notify_one(); @@ -47,7 +47,7 @@ public: void Push(T&& value) { - std::lock_guard<std::mutex> lock(_queueLock); + std::scoped_lock lock(_queueLock); _queue.push(std::move(value)); _condition.notify_one(); @@ -55,21 +55,21 @@ public: bool Empty() const { - std::lock_guard<std::mutex> lock(_queueLock); + std::scoped_lock lock(_queueLock); return _queue.empty(); } size_t Size() const { - std::lock_guard<std::mutex> lock(_queueLock); + std::scoped_lock lock(_queueLock); return _queue.size(); } bool Pop(T& value) { - std::lock_guard<std::mutex> lock(_queueLock); + std::scoped_lock lock(_queueLock); if (_queue.empty() || _shutdown) return false; @@ -83,12 +83,9 @@ public: void WaitAndPop(T& value) { - std::unique_lock<std::mutex> lock(_queueLock); + std::unique_lock lock(_queueLock); - // we could be using .wait(lock, predicate) overload here but it is broken - // https://connect.microsoft.com/VisualStudio/feedback/details/1098841 - while (_queue.empty() && !_shutdown) - _condition.wait(lock); + _condition.wait(lock, [&] { return !_queue.empty() || _shutdown; }); if (_queue.empty() || _shutdown) return; @@ -100,7 +97,7 @@ public: void Cancel() { - std::unique_lock<std::mutex> lock(_queueLock); + std::scoped_lock lock(_queueLock); while (!_queue.empty()) { diff --git a/src/common/network/Http/HttpService.cpp b/src/common/network/Http/HttpService.cpp index 3ba983ac10e..15328fb92a9 100644 --- a/src/common/network/Http/HttpService.cpp +++ b/src/common/network/Http/HttpService.cpp @@ -130,7 +130,7 @@ void SessionService::InitAndStoreSessionState(std::shared_ptr<SessionState> stat // Generate session id { - std::unique_lock lock{ _sessionsMutex }; + std::scoped_lock lock{ _sessionsMutex }; while (state->Id.is_nil() || _sessions.contains(state->Id)) std::copy_n(Trinity::Crypto::GetRandomBytes<16>().begin(), 16, state->Id.begin()); @@ -157,11 +157,11 @@ void SessionService::Stop() { _inactiveSessionsKillTimer = nullptr; { - std::unique_lock lock{ _sessionsMutex }; + std::scoped_lock lock{ _sessionsMutex }; _sessions.clear(); } { - std::unique_lock lock{ _inactiveSessionsMutex }; + std::scoped_lock lock{ _inactiveSessionsMutex }; _inactiveSessions.clear(); } } @@ -190,7 +190,7 @@ std::shared_ptr<SessionState> SessionService::FindAndRefreshSessionState(std::st } { - std::unique_lock inactiveSessionsLock{ _inactiveSessionsMutex }; + std::scoped_lock inactiveSessionsLock{ _inactiveSessionsMutex }; _inactiveSessions.erase(state->Id); } @@ -201,7 +201,7 @@ void SessionService::MarkSessionInactive(boost::uuids::uuid const& id) { bool wasActive = true; { - std::unique_lock inactiveSessionsLock{ _inactiveSessionsMutex }; + std::scoped_lock inactiveSessionsLock{ _inactiveSessionsMutex }; wasActive = _inactiveSessions.insert(id).second; } @@ -222,7 +222,7 @@ void SessionService::KillInactiveSessions() std::set<boost::uuids::uuid> inactiveSessions; { - std::unique_lock lock{ _inactiveSessionsMutex }; + std::scoped_lock lock{ _inactiveSessionsMutex }; std::swap(_inactiveSessions, inactiveSessions); } @@ -230,7 +230,7 @@ void SessionService::KillInactiveSessions() TimePoint now = TimePoint::clock::now(); std::size_t inactiveSessionsCount = inactiveSessions.size(); - std::unique_lock lock{ _sessionsMutex }; + std::scoped_lock lock{ _sessionsMutex }; for (auto itr = inactiveSessions.begin(); itr != inactiveSessions.end(); ) { auto sessionItr = _sessions.find(*itr); @@ -248,7 +248,7 @@ void SessionService::KillInactiveSessions() { // restore sessions not killed to inactive queue - std::unique_lock lock{ _inactiveSessionsMutex }; + std::scoped_lock lock{ _inactiveSessionsMutex }; for (auto itr = inactiveSessions.begin(); itr != inactiveSessions.end(); ) { auto node = inactiveSessions.extract(itr++); diff --git a/src/common/network/NetworkThread.h b/src/common/network/NetworkThread.h index d16da442149..b810abaa48a 100644 --- a/src/common/network/NetworkThread.h +++ b/src/common/network/NetworkThread.h @@ -84,7 +84,7 @@ public: void AddSocket(std::shared_ptr<SocketType> sock) { - std::lock_guard<std::mutex> lock(_newSocketsLock); + std::scoped_lock lock(_newSocketsLock); ++_connections; SocketAdded(_newSockets.emplace_back(std::move(sock))); @@ -98,7 +98,7 @@ protected: void AddNewSockets() { - std::lock_guard<std::mutex> lock(_newSocketsLock); + std::scoped_lock lock(_newSocketsLock); if (_newSockets.empty()) return; |
