summaryrefslogtreecommitdiff
path: root/boost/thread/win32
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2019-12-05 15:22:41 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2019-12-05 15:22:41 +0900
commit3c1df2168531ad5580076ae08d529054689aeedd (patch)
tree941aff6f86393eecacddfec252a8508c7e8351c9 /boost/thread/win32
parentd6a306e745acfee00e81ccaf3324a2a03516db41 (diff)
downloadboost-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.hpp17
-rw-r--r--boost/thread/win32/thread_data.hpp11
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_)
{}
};