diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:22:41 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:22:41 +0900 |
commit | 3c1df2168531ad5580076ae08d529054689aeedd (patch) | |
tree | 941aff6f86393eecacddfec252a8508c7e8351c9 /boost/thread/win32 | |
parent | d6a306e745acfee00e81ccaf3324a2a03516db41 (diff) | |
download | boost-3c1df2168531ad5580076ae08d529054689aeedd.tar.gz boost-3c1df2168531ad5580076ae08d529054689aeedd.tar.bz2 boost-3c1df2168531ad5580076ae08d529054689aeedd.zip |
Imported Upstream version 1.70.0upstream/1.70.0
Diffstat (limited to 'boost/thread/win32')
-rw-r--r-- | boost/thread/win32/shared_mutex.hpp | 17 | ||||
-rw-r--r-- | boost/thread/win32/thread_data.hpp | 11 |
2 files changed, 19 insertions, 9 deletions
diff --git a/boost/thread/win32/shared_mutex.hpp b/boost/thread/win32/shared_mutex.hpp index 76ee2579b3..7f8d279001 100644 --- a/boost/thread/win32/shared_mutex.hpp +++ b/boost/thread/win32/shared_mutex.hpp @@ -8,6 +8,7 @@ // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +#include <cstring> #include <boost/assert.hpp> #include <boost/detail/interlocked.hpp> #include <boost/thread/win32/thread_primitives.hpp> @@ -39,16 +40,22 @@ namespace boost friend bool operator==(state_data const& lhs,state_data const& rhs) { - return *reinterpret_cast<unsigned long const*>(&lhs)==*reinterpret_cast<unsigned long const*>(&rhs); + return std::memcmp(&lhs, &rhs, sizeof(lhs)) == 0; } }; - state_data interlocked_compare_exchange(state_data* target, state_data new_value, state_data comparand) + static state_data interlocked_compare_exchange(state_data* target, state_data new_value, state_data comparand) { + BOOST_STATIC_ASSERT(sizeof(state_data) == sizeof(long)); + long new_val, comp; + std::memcpy(&new_val, &new_value, sizeof(new_value)); + std::memcpy(&comp, &comparand, sizeof(comparand)); long const res=BOOST_INTERLOCKED_COMPARE_EXCHANGE(reinterpret_cast<long*>(target), - *reinterpret_cast<long*>(&new_value), - *reinterpret_cast<long*>(&comparand)); - return *reinterpret_cast<state_data const*>(&res); + new_val, + comp); + state_data result; + std::memcpy(&result, &res, sizeof(result)); + return result; } enum diff --git a/boost/thread/win32/thread_data.hpp b/boost/thread/win32/thread_data.hpp index 2f28820290..b1a550af44 100644 --- a/boost/thread/win32/thread_data.hpp +++ b/boost/thread/win32/thread_data.hpp @@ -80,12 +80,15 @@ namespace boost struct thread_exit_callback_node; struct tss_data_node { - boost::shared_ptr<boost::detail::tss_cleanup_function> func; + typedef void(*cleanup_func_t)(void*); + typedef void(*cleanup_caller_t)(cleanup_func_t, void*); + + cleanup_caller_t caller; + cleanup_func_t func; void* value; - tss_data_node(boost::shared_ptr<boost::detail::tss_cleanup_function> func_, - void* value_): - func(func_),value(value_) + tss_data_node(cleanup_caller_t caller_,cleanup_func_t func_,void* value_): + caller(caller_),func(func_),value(value_) {} }; |