From d4c0f91275fe70fef73b316c36abfb989dfd55b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Blot?= Date: Tue, 6 Jun 2017 16:29:28 +0200 Subject: [PATCH] Use C++11 mutexes only (remove compat code) (#5922) * Fix event LINT & remove default constructor/destructors * remove compat code & modernize autolock header --- src/ban.h | 4 +- src/client.h | 1 - src/client/clientlauncher.cpp | 2 +- src/client/tile.cpp | 2 +- src/clientiface.h | 6 +- src/debug.cpp | 3 +- src/emerge.h | 3 +- src/environment.h | 4 +- src/face_position_cache.cpp | 2 +- src/face_position_cache.h | 4 +- src/httpfetch.cpp | 3 +- src/log.h | 3 +- src/mesh_generator_thread.h | 3 +- src/minimap.h | 5 +- src/network/connection.cpp | 2 +- src/network/connection.h | 12 ++-- src/particles.h | 4 +- src/player.h | 4 +- src/profiler.h | 3 +- src/quicktune.cpp | 5 +- src/script/cpp_api/s_async.h | 5 +- src/script/cpp_api/s_base.h | 3 +- src/server.h | 4 +- src/settings.h | 6 +- src/shader.cpp | 2 +- src/threading/CMakeLists.txt | 1 - src/threading/event.cpp | 48 ------------- src/threading/event.h | 19 +----- src/threading/mutex.cpp | 116 -------------------------------- src/threading/mutex.h | 84 ----------------------- src/threading/mutex_auto_lock.h | 40 ++--------- src/threading/thread.h | 6 +- src/threads.h | 2 - src/util/container.h | 7 +- src/util/numeric.h | 1 - src/util/thread.h | 3 +- 36 files changed, 59 insertions(+), 363 deletions(-) delete mode 100644 src/threading/mutex.cpp delete mode 100644 src/threading/mutex.h diff --git a/src/ban.h b/src/ban.h index e35bd0e10..7c88406d4 100644 --- a/src/ban.h +++ b/src/ban.h @@ -22,10 +22,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/string.h" #include "threading/thread.h" -#include "threading/mutex.h" #include "exceptions.h" #include #include +#include class BanManager { @@ -43,7 +43,7 @@ public: bool isModified(); private: - Mutex m_mutex; + std::mutex m_mutex; std::string m_banfilepath; StringMap m_ips; bool m_modified; diff --git a/src/client.h b/src/client.h index fc2416087..149fdfe57 100644 --- a/src/client.h +++ b/src/client.h @@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "network/connection.h" #include "clientenvironment.h" #include "irrlichttypes_extrabloated.h" -#include "threading/mutex.h" #include #include #include diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 3e8fa2f2f..aeab82512 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -657,7 +657,7 @@ void ClientLauncher::speed_tests() infostream << "Around 5000/ms should do well here." << std::endl; TimeTaker timer("Testing mutex speed"); - Mutex m; + std::mutex m; u32 n = 0; u32 i = 0; do { diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 0918836e5..10a9d5f0d 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -417,7 +417,7 @@ private: // Maps a texture name to an index in the former. std::map m_name_to_id; // The two former containers are behind this mutex - Mutex m_textureinfo_cache_mutex; + std::mutex m_textureinfo_cache_mutex; // Queued texture fetches (to be processed by the main thread) RequestQueue m_get_texture_queue; diff --git a/src/clientiface.h b/src/clientiface.h index 107ed3bf3..edcd91ef3 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -23,13 +23,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "constants.h" #include "serialization.h" // for SER_FMT_VER_INVALID -#include "threading/mutex.h" #include "network/networkpacket.h" #include "porting.h" #include #include #include +#include class MapBlock; class ServerEnvironment; @@ -508,14 +508,14 @@ private: // Connection con::Connection* m_con; - Mutex m_clients_mutex; + std::mutex m_clients_mutex; // Connected clients (behind the con mutex) RemoteClientMap m_clients; std::vector m_clients_names; //for announcing masterserver // Environment ServerEnvironment *m_env; - Mutex m_env_mutex; + std::mutex m_env_mutex; float m_print_info_timer; diff --git a/src/debug.cpp b/src/debug.cpp index 8647160b1..0490fcf4e 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -27,7 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "threading/mutex.h" #include "threading/mutex_auto_lock.h" #include "config.h" @@ -152,7 +151,7 @@ void DebugStack::print(std::ostream &os, bool everything) // pthread_t, but it isn't too important since none of our supported platforms // implement pthread_t as a non-ordinal type. std::map g_debug_stacks; -Mutex g_debug_stacks_mutex; +std::mutex g_debug_stacks_mutex; void debug_stacks_init() { diff --git a/src/emerge.h b/src/emerge.h index 55be370d2..2b5d57434 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #define EMERGE_HEADER #include +#include #include "irr_v3d.h" #include "util/container.h" #include "mapgen.h" // for MapgenParams @@ -155,7 +156,7 @@ private: std::vector m_threads; bool m_threads_active; - Mutex m_queue_mutex; + std::mutex m_queue_mutex; std::map m_blocks_enqueued; std::unordered_map m_peer_queue_count; diff --git a/src/environment.h b/src/environment.h index ff3942599..4c00ef9e8 100644 --- a/src/environment.h +++ b/src/environment.h @@ -34,10 +34,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include #include "irr_v3d.h" #include "activeobject.h" #include "util/numeric.h" -#include "threading/mutex.h" #include "network/networkprotocol.h" // for AccessDeniedCode class IGameDef; @@ -120,7 +120,7 @@ protected: IGameDef *m_gamedef; private: - Mutex m_time_lock; + std::mutex m_time_lock; DISABLE_CLASS_COPY(Environment); }; diff --git a/src/face_position_cache.cpp b/src/face_position_cache.cpp index d2883a1b3..e6dd12170 100644 --- a/src/face_position_cache.cpp +++ b/src/face_position_cache.cpp @@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., std::unordered_map> FacePositionCache::cache; -Mutex FacePositionCache::cache_mutex; +std::mutex FacePositionCache::cache_mutex; // Calculate the borders of a "d-radius" cube const std::vector &FacePositionCache::getFacePositions(u16 d) diff --git a/src/face_position_cache.h b/src/face_position_cache.h index 5ea0d938b..29ae0f0a9 100644 --- a/src/face_position_cache.h +++ b/src/face_position_cache.h @@ -21,11 +21,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #define FACE_POSITION_CACHE_HEADER #include "irr_v3d.h" -#include "threading/mutex.h" #include #include #include +#include /* * This class permits caching getFacePosition call results. @@ -38,7 +38,7 @@ public: private: static const std::vector &generateFacePosition(u16 d); static std::unordered_map> cache; - static Mutex cache_mutex; + static std::mutex cache_mutex; }; #endif diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index 3b3f5d331..ac743bf77 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include #include "threading/event.h" #include "config.h" #include "exceptions.h" @@ -36,7 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "noise.h" -Mutex g_httpfetch_mutex; +std::mutex g_httpfetch_mutex; std::map > g_httpfetch_results; PcgRandom g_callerid_randomness; diff --git a/src/log.h b/src/log.h index 219255d9a..c017d127e 100644 --- a/src/log.h +++ b/src/log.h @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include #include "threads.h" #include "irrlichttypes.h" @@ -79,7 +80,7 @@ private: // Works on all known architectures (x86, ARM, MIPS). volatile bool m_silenced_levels[LL_MAX]; std::map m_thread_names; - mutable Mutex m_mutex; + mutable std::mutex m_mutex; bool m_trace_enabled; }; diff --git a/src/mesh_generator_thread.h b/src/mesh_generator_thread.h index 6edb6906d..3ac086e30 100644 --- a/src/mesh_generator_thread.h +++ b/src/mesh_generator_thread.h @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef MESH_GENERATOR_THREAD_HEADER #define MESH_GENERATOR_THREAD_HEADER +#include #include "mapblock_mesh.h" #include "threading/mutex_auto_lock.h" #include "util/thread.h" @@ -83,7 +84,7 @@ private: std::vector m_queue; std::set m_urgents; std::map m_cache; - Mutex m_mutex; + std::mutex m_mutex; // TODO: Add callback to update these when g_settings changes bool m_cache_enable_shaders; diff --git a/src/minimap.h b/src/minimap.h index c50530335..58d05d668 100644 --- a/src/minimap.h +++ b/src/minimap.h @@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_extrabloated.h" #include "client.h" #include "voxel.h" -#include "threading/mutex.h" #include "threading/semaphore.h" #include #include @@ -112,7 +111,7 @@ protected: virtual void doUpdate(); private: - Mutex m_queue_mutex; + std::mutex m_queue_mutex; std::deque m_update_queue; std::map m_blocks_cache; }; @@ -161,7 +160,7 @@ private: bool m_enable_shaders; u16 m_surface_mode_scan_height; f32 m_angle; - Mutex m_mutex; + std::mutex m_mutex; std::list m_active_markers; }; diff --git a/src/network/connection.cpp b/src/network/connection.cpp index fb3ba92ae..61b98b6d7 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -42,7 +42,7 @@ namespace con #undef DEBUG_CONNECTION_KBPS #else /* this mutex is used to achieve log message consistency */ -Mutex log_message_mutex; +std::mutex log_message_mutex; #define LOG(a) \ { \ MutexAutoLock loglock(log_message_mutex); \ diff --git a/src/network/connection.h b/src/network/connection.h index 8b7ed9773..51cf6aec6 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -349,7 +349,7 @@ private: u16 m_oldest_non_answered_ack; - Mutex m_list_mutex; + std::mutex m_list_mutex; }; /* @@ -372,7 +372,7 @@ private: // Key is seqnum std::map m_buf; - Mutex m_map_mutex; + std::mutex m_map_mutex; }; struct OutgoingPacket @@ -544,7 +544,7 @@ public: void setWindowSize(unsigned int size) { window_size = size; }; private: - Mutex m_internal_mutex; + std::mutex m_internal_mutex; int window_size; u16 next_incoming_seqnum; @@ -738,7 +738,7 @@ class Peer { bool IncUseCount(); void DecUseCount(); - Mutex m_exclusive_access_mutex; + std::mutex m_exclusive_access_mutex; bool m_pending_deletion; @@ -1064,12 +1064,12 @@ private: std::map m_peers; std::list m_peer_ids; - Mutex m_peers_mutex; + std::mutex m_peers_mutex; ConnectionSendThread m_sendThread; ConnectionReceiveThread m_receiveThread; - Mutex m_info_mutex; + std::mutex m_info_mutex; // Backwards compatibility PeerHandler *m_bc_peerhandler; diff --git a/src/particles.h b/src/particles.h index eaec1f0fa..87583aae6 100644 --- a/src/particles.h +++ b/src/particles.h @@ -213,8 +213,8 @@ private: std::map m_particle_spawners; ClientEnvironment* m_env; - Mutex m_particle_list_lock; - Mutex m_spawner_list_lock; + std::mutex m_particle_list_lock; + std::mutex m_spawner_list_lock; }; #endif diff --git a/src/player.h b/src/player.h index 3432069c0..00d27cb90 100644 --- a/src/player.h +++ b/src/player.h @@ -22,8 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_bloated.h" #include "inventory.h" -#include "threading/mutex.h" #include +#include #define PLAYERNAME_SIZE 20 @@ -186,7 +186,7 @@ private: // Protect some critical areas // hud for example can be modified by EmergeThread // and ServerThread - Mutex m_mutex; + std::mutex m_mutex; }; #endif diff --git a/src/profiler.h b/src/profiler.h index ce60c6262..2d70e8af4 100644 --- a/src/profiler.h +++ b/src/profiler.h @@ -24,7 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#include "threading/mutex.h" #include "threading/mutex_auto_lock.h" #include "util/timetaker.h" #include "util/numeric.h" // paging() @@ -177,7 +176,7 @@ public: } private: - Mutex m_mutex; + std::mutex m_mutex; std::map m_data; std::map m_avgcounts; std::map m_graphvalues; diff --git a/src/quicktune.cpp b/src/quicktune.cpp index b0e2dc6d5..37d4933de 100644 --- a/src/quicktune.cpp +++ b/src/quicktune.cpp @@ -18,7 +18,6 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "quicktune.h" -#include "threading/mutex.h" #include "threading/mutex_auto_lock.h" #include "util/string.h" @@ -49,12 +48,12 @@ void QuicktuneValue::relativeAdd(float amount) static std::map g_values; static std::vector g_names; -Mutex *g_mutex = NULL; +std::mutex *g_mutex = NULL; static void makeMutex() { if(!g_mutex){ - g_mutex = new Mutex(); + g_mutex = new std::mutex(); } } diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h index dbe0654e2..45f935d0a 100644 --- a/src/script/cpp_api/s_async.h +++ b/src/script/cpp_api/s_async.h @@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "threading/thread.h" -#include "threading/mutex.h" #include "threading/semaphore.h" #include "debug.h" #include "lua.h" @@ -147,13 +146,13 @@ private: unsigned int jobIdCounter; // Mutex to protect job queue - Mutex jobQueueMutex; + std::mutex jobQueueMutex; // Job queue std::deque jobQueue; // Mutex to protect result queue - Mutex resultQueueMutex; + std::mutex resultQueueMutex; // Result queue std::deque resultQueue; diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index 5b047a081..e0f6b23ae 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -29,7 +29,6 @@ extern "C" { #include "irrlichttypes.h" #include "threads.h" -#include "threading/mutex.h" #include "threading/mutex_auto_lock.h" #include "common/c_types.h" #include "common/c_internal.h" @@ -116,7 +115,7 @@ protected: void objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj); - RecursiveMutex m_luastackmutex; + std::recursive_mutex m_luastackmutex; std::string m_last_run_mod; bool m_secure; #ifdef SCRIPTAPI_LOCK_DEBUG diff --git a/src/server.h b/src/server.h index 935be5f95..5236851fe 100644 --- a/src/server.h +++ b/src/server.h @@ -375,7 +375,7 @@ public: Address m_bind_addr; // Environment mutex (envlock) - Mutex m_env_mutex; + std::mutex m_env_mutex; private: @@ -578,7 +578,7 @@ private: // A buffer for time steps // step() increments and AsyncRunStep() run by m_thread reads it. float m_step_dtime; - Mutex m_step_dtime_mutex; + std::mutex m_step_dtime_mutex; // current server step lag counter float m_lag; diff --git a/src/settings.h b/src/settings.h index e570c1a84..d1edca6b6 100644 --- a/src/settings.h +++ b/src/settings.h @@ -22,10 +22,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_bloated.h" #include "util/string.h" -#include "threading/mutex.h" #include #include #include +#include class Settings; struct NoiseParams; @@ -232,10 +232,10 @@ private: SettingsCallbackMap m_callbacks; - mutable Mutex m_callback_mutex; + mutable std::mutex m_callback_mutex; // All methods that access m_settings/m_defaults directly should lock this. - mutable Mutex m_mutex; + mutable std::mutex m_mutex; }; diff --git a/src/shader.cpp b/src/shader.cpp index 66f32c9a1..1d3f2f6a1 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -320,7 +320,7 @@ private: // The first position contains a dummy shader. std::vector m_shaderinfo_cache; // The former container is behind this mutex - Mutex m_shaderinfo_cache_mutex; + std::mutex m_shaderinfo_cache_mutex; // Queued shader fetches (to be processed by the main thread) RequestQueue m_get_shader_queue; diff --git a/src/threading/CMakeLists.txt b/src/threading/CMakeLists.txt index 5dd60ef1a..8f86158be 100644 --- a/src/threading/CMakeLists.txt +++ b/src/threading/CMakeLists.txt @@ -1,6 +1,5 @@ set(JTHREAD_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/event.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/mutex.cpp ${CMAKE_CURRENT_SOURCE_DIR}/thread.cpp ${CMAKE_CURRENT_SOURCE_DIR}/semaphore.cpp PARENT_SCOPE) diff --git a/src/threading/event.cpp b/src/threading/event.cpp index a22c6628b..4e8d4bb3e 100644 --- a/src/threading/event.cpp +++ b/src/threading/event.cpp @@ -25,67 +25,19 @@ DEALINGS IN THE SOFTWARE. #include "threading/event.h" -Event::Event() -{ -#ifndef USE_CPP11_MUTEX -# if USE_WIN_MUTEX - event = CreateEvent(NULL, false, false, NULL); -# else - pthread_cond_init(&cv, NULL); - pthread_mutex_init(&mutex, NULL); - notified = false; -# endif -#elif USE_CPP11_MUTEX - notified = false; -#endif -} - -#ifndef USE_CPP11_MUTEX -Event::~Event() -{ -#if USE_WIN_MUTEX - CloseHandle(event); -#else - pthread_cond_destroy(&cv); - pthread_mutex_destroy(&mutex); -#endif -} -#endif - - void Event::wait() { -#if USE_CPP11_MUTEX MutexAutoLock lock(mutex); while (!notified) { cv.wait(lock); } notified = false; -#elif USE_WIN_MUTEX - WaitForSingleObject(event, INFINITE); -#else - pthread_mutex_lock(&mutex); - while (!notified) { - pthread_cond_wait(&cv, &mutex); - } - notified = false; - pthread_mutex_unlock(&mutex); -#endif } void Event::signal() { -#if USE_CPP11_MUTEX MutexAutoLock lock(mutex); notified = true; cv.notify_one(); -#elif USE_WIN_MUTEX - SetEvent(event); -#else - pthread_mutex_lock(&mutex); - notified = true; - pthread_cond_signal(&cv); - pthread_mutex_unlock(&mutex); -#endif } diff --git a/src/threading/event.h b/src/threading/event.h index 79a99ce1f..458864c82 100644 --- a/src/threading/event.h +++ b/src/threading/event.h @@ -28,11 +28,8 @@ DEALINGS IN THE SOFTWARE. #include "threads.h" -#if USE_CPP11_MUTEX #include -#include "threading/mutex.h" #include "threading/mutex_auto_lock.h" -#endif /** A syncronization primitive that will wake up one waiting thread when signaled. * Calling @c signal() multiple times before a waiting thread has had a chance @@ -43,25 +40,13 @@ DEALINGS IN THE SOFTWARE. class Event { public: - Event(); -#ifndef USE_CPP11_MUTEX - ~Event(); -#endif void wait(); void signal(); private: -#if USE_CPP11_MUTEX std::condition_variable cv; - Mutex mutex; - bool notified; -#elif USE_WIN_MUTEX - HANDLE event; -#else - pthread_cond_t cv; - pthread_mutex_t mutex; - bool notified; -#endif + std::mutex mutex; + bool notified = false; }; #endif diff --git a/src/threading/mutex.cpp b/src/threading/mutex.cpp deleted file mode 100644 index d864f12c5..000000000 --- a/src/threading/mutex.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* -This file is a part of the JThread package, which contains some object- -oriented thread wrappers for different thread implementations. - -Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - -#include "threads.h" - -#ifndef USE_CPP11_MUTEX - -#include "threading/mutex.h" - -#include - -#define UNUSED(expr) do { (void)(expr); } while (0) - -Mutex::Mutex() -{ - init_mutex(false); -} - - -Mutex::Mutex(bool recursive) -{ - init_mutex(recursive); -} - -void Mutex::init_mutex(bool recursive) -{ -#if USE_WIN_MUTEX - // Windows critical sections are recursive by default - UNUSED(recursive); - - InitializeCriticalSection(&mutex); -#else - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - - if (recursive) - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - - int ret = pthread_mutex_init(&mutex, &attr); - assert(!ret); - UNUSED(ret); - - pthread_mutexattr_destroy(&attr); -#endif -} - -Mutex::~Mutex() -{ -#if USE_WIN_MUTEX - DeleteCriticalSection(&mutex); -#else - int ret = pthread_mutex_destroy(&mutex); - assert(!ret); - UNUSED(ret); -#endif -} - -void Mutex::lock() -{ -#if USE_WIN_MUTEX - EnterCriticalSection(&mutex); -#else - int ret = pthread_mutex_lock(&mutex); - assert(!ret); - UNUSED(ret); -#endif -} - -bool Mutex::try_lock() -{ -#if USE_WIN_MUTEX - return TryEnterCriticalSection(&mutex) != 0; -#else - return pthread_mutex_trylock(&mutex) == 0; -#endif -} - -void Mutex::unlock() -{ -#if USE_WIN_MUTEX - LeaveCriticalSection(&mutex); -#else - int ret = pthread_mutex_unlock(&mutex); - assert(!ret); - UNUSED(ret); -#endif -} - -RecursiveMutex::RecursiveMutex() - : Mutex(true) -{} - -#endif // C++11 - diff --git a/src/threading/mutex.h b/src/threading/mutex.h deleted file mode 100644 index 6feb23c25..000000000 --- a/src/threading/mutex.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -This file is a part of the JThread package, which contains some object- -oriented thread wrappers for different thread implementations. - -Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. -*/ - -#ifndef THREADING_MUTEX_H -#define THREADING_MUTEX_H - -#include "threads.h" - -#if USE_CPP11_MUTEX - #include - using Mutex = std::mutex; - using RecursiveMutex = std::recursive_mutex; -#else - -#if USE_WIN_MUTEX - #ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0501 - #endif - #ifndef WIN32_LEAN_AND_MEAN - #define WIN32_LEAN_AND_MEAN - #endif - #include -#else - #include -#endif - -#include "util/basic_macros.h" - -class Mutex -{ -public: - Mutex(); - ~Mutex(); - void lock(); - void unlock(); - - bool try_lock(); - -protected: - Mutex(bool recursive); - void init_mutex(bool recursive); -private: -#if USE_WIN_MUTEX - CRITICAL_SECTION mutex; -#else - pthread_mutex_t mutex; -#endif - - DISABLE_CLASS_COPY(Mutex); -}; - -class RecursiveMutex : public Mutex -{ -public: - RecursiveMutex(); - - DISABLE_CLASS_COPY(RecursiveMutex); -}; - -#endif // C++11 - -#endif diff --git a/src/threading/mutex_auto_lock.h b/src/threading/mutex_auto_lock.h index d79c68a93..c809ff8f5 100644 --- a/src/threading/mutex_auto_lock.h +++ b/src/threading/mutex_auto_lock.h @@ -23,40 +23,8 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef THREADING_MUTEX_AUTO_LOCK_H -#define THREADING_MUTEX_AUTO_LOCK_H - -#include "threads.h" - -#if USE_CPP11_MUTEX - #include - using MutexAutoLock = std::unique_lock; - using RecursiveMutexAutoLock = std::unique_lock; -#else - -#include "threading/mutex.h" - - -class MutexAutoLock -{ -public: - MutexAutoLock(Mutex &m) : mutex(m) { mutex.lock(); } - ~MutexAutoLock() { mutex.unlock(); } - -private: - Mutex &mutex; -}; - -class RecursiveMutexAutoLock -{ -public: - RecursiveMutexAutoLock(RecursiveMutex &m) : mutex(m) { mutex.lock(); } - ~RecursiveMutexAutoLock() { mutex.unlock(); } - -private: - RecursiveMutex &mutex; -}; -#endif - -#endif +#pragma once +#include +using MutexAutoLock = std::unique_lock; +using RecursiveMutexAutoLock = std::unique_lock; diff --git a/src/threading/thread.h b/src/threading/thread.h index 671a9be0b..ab943f094 100644 --- a/src/threading/thread.h +++ b/src/threading/thread.h @@ -27,11 +27,11 @@ DEALINGS IN THE SOFTWARE. #define THREADING_THREAD_H #include "util/basic_macros.h" -#include "threading/mutex.h" #include "threads.h" #include #include +#include #ifdef _AIX #include // for tid_t @@ -153,8 +153,8 @@ private: bool m_joinable; std::atomic m_request_stop; std::atomic m_running; - Mutex m_mutex; - Mutex m_start_finished_mutex; + std::mutex m_mutex; + std::mutex m_start_finished_mutex; #if USE_CPP11_THREADS std::thread *m_thread_obj; diff --git a/src/threads.h b/src/threads.h index ce98593cd..9731dcb5e 100644 --- a/src/threads.h +++ b/src/threads.h @@ -54,8 +54,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #endif -#include "threading/mutex.h" - // // threadid_t, threadhandle_t // diff --git a/src/util/container.h b/src/util/container.h index 7f66b89ac..caaa1c328 100644 --- a/src/util/container.h +++ b/src/util/container.h @@ -22,7 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../irrlichttypes.h" #include "../exceptions.h" -#include "../threading/mutex.h" #include "../threading/mutex_auto_lock.h" #include "../threading/semaphore.h" #include @@ -117,7 +116,7 @@ public: private: std::map m_values; - mutable Mutex m_mutex; + mutable std::mutex m_mutex; }; @@ -225,12 +224,12 @@ public: } protected: - Mutex &getMutex() { return m_mutex; } + std::mutex &getMutex() { return m_mutex; } std::deque &getQueue() { return m_queue; } std::deque m_queue; - mutable Mutex m_mutex; + mutable std::mutex m_mutex; Semaphore m_signal; }; diff --git a/src/util/numeric.h b/src/util/numeric.h index 4a27f657d..3b1b85f64 100644 --- a/src/util/numeric.h +++ b/src/util/numeric.h @@ -25,7 +25,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../irr_v2d.h" #include "../irr_v3d.h" #include "../irr_aabb3d.h" -#include "../threading/mutex.h" #define rangelim(d, min, max) ((d) < (min) ? (min) : ((d) > (max) ? (max) : (d))) #define myfloor(x) ((x) < 0.0 ? (int)(x) - 1 : (int)(x)) diff --git a/src/util/thread.h b/src/util/thread.h index b96f302f6..201d09a08 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -22,7 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../irrlichttypes.h" #include "../threading/thread.h" -#include "../threading/mutex.h" #include "../threading/mutex_auto_lock.h" #include "porting.h" #include "log.h" @@ -51,7 +50,7 @@ public: // You pretty surely want to grab the lock when accessing this T m_value; private: - Mutex m_mutex; + std::mutex m_mutex; }; /*