mirror of
https://github.com/ceph/ceph
synced 2026-08-02 07:03:18 +00:00
Merge pull request #46989 from petrutlucian94/boost_shared_mutex
common: use boost::shared_mutex on Windows Reviewed-by: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Kefu Chai <tchaikov@gmail.com>
This commit is contained in:
commit
9ff4b5a1a3
@ -39,7 +39,15 @@ if(WIN32)
|
||||
# the targeted Windows version. The availability of certain functions and
|
||||
# structures will depend on it.
|
||||
set(WIN32_WINNT "0x0A00" CACHE STRING "Targeted Windows version.")
|
||||
add_definitions(-D_WIN32_WINNT=${WIN32_WINNT})
|
||||
# In order to avoid known winpthread issues, we're using the boost
|
||||
# shared mutex implementation.
|
||||
# https://github.com/msys2/MINGW-packages/issues/3319
|
||||
add_definitions(
|
||||
-D_WIN32_WINNT=${WIN32_WINNT}
|
||||
-DBOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
|
||||
-DBOOST_THREAD_V2_SHARED_MUTEX
|
||||
)
|
||||
set(Boost_THREADAPI "win32")
|
||||
endif()
|
||||
|
||||
if(MINGW)
|
||||
|
||||
@ -69,6 +69,9 @@ namespace ceph {
|
||||
// ============================================================================
|
||||
// debug (lockdep-capable, various sanity checks and asserts)
|
||||
// ============================================================================
|
||||
//
|
||||
// Note: this is known to cause deadlocks on Windows because
|
||||
// of the winpthreads shared mutex implementation.
|
||||
|
||||
#include "common/condition_variable_debug.h"
|
||||
#include "common/mutex_debug.h"
|
||||
@ -115,27 +118,39 @@ namespace ceph {
|
||||
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
#include <shared_mutex>
|
||||
|
||||
// The winpthreads shared mutex implementation is broken.
|
||||
// We'll use boost::shared_mutex instead.
|
||||
// https://github.com/msys2/MINGW-packages/issues/3319
|
||||
#if __MINGW32__
|
||||
#include <boost/thread/shared_mutex.hpp>
|
||||
#else
|
||||
#include <shared_mutex>
|
||||
#endif
|
||||
|
||||
namespace ceph {
|
||||
|
||||
typedef std::mutex mutex;
|
||||
typedef std::recursive_mutex recursive_mutex;
|
||||
typedef std::condition_variable condition_variable;
|
||||
|
||||
#if __MINGW32__
|
||||
typedef boost::shared_mutex shared_mutex;
|
||||
#else
|
||||
typedef std::shared_mutex shared_mutex;
|
||||
#endif
|
||||
|
||||
// discard arguments to make_mutex (they are for debugging only)
|
||||
template <typename ...Args>
|
||||
std::mutex make_mutex(Args&& ...args) {
|
||||
mutex make_mutex(Args&& ...args) {
|
||||
return {};
|
||||
}
|
||||
template <typename ...Args>
|
||||
std::recursive_mutex make_recursive_mutex(Args&& ...args) {
|
||||
recursive_mutex make_recursive_mutex(Args&& ...args) {
|
||||
return {};
|
||||
}
|
||||
template <typename ...Args>
|
||||
std::shared_mutex make_shared_mutex(Args&& ...args) {
|
||||
shared_mutex make_shared_mutex(Args&& ...args) {
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
@ -201,7 +201,7 @@ EOL
|
||||
./b2 install --user-config=user-config.jam toolset=gcc-mingw32 \
|
||||
target-os=windows release \
|
||||
link=static,shared \
|
||||
threadapi=pthread --prefix=$boostDir \
|
||||
threadapi=win32 --prefix=$boostDir \
|
||||
address-model=64 architecture=x86 \
|
||||
binary-format=pe abi=ms -j $NUM_WORKERS \
|
||||
-sZLIB_INCLUDE=$zlibDir/include -sZLIB_LIBRARY_PATH=$zlibDir/lib \
|
||||
|
||||
Loading…
Reference in New Issue
Block a user