diff --git a/libs/pbd/pbd/spinlock.h b/libs/pbd/pbd/spinlock.h index 2e543408df..d8706c68c9 100644 --- a/libs/pbd/pbd/spinlock.h +++ b/libs/pbd/pbd/spinlock.h @@ -20,6 +20,8 @@ #define _pbd_spinlock_h_ #include +#include + #include "pbd/libpbd_visibility.h" namespace PBD { @@ -35,10 +37,23 @@ namespace PBD { struct spinlock_t { public: - spinlock_t (); +#ifdef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED + /* C++11 non-static data member initialization, + * with non-copyable std::atomic ATOMIC_FLAG_INIT + */ + spinlock_t () : l (BOOST_DETAIL_SPINLOCK_INIT) {}; +#else + /* default C++ assign struct's first member */ + spinlock_t () + { + boost::detail::spinlock init = BOOST_DETAIL_SPINLOCK_INIT; + std::memcpy (&l, &init, sizeof (init)); + } +#endif void lock () { l.lock (); } void unlock () { l.unlock (); } bool try_lock () { return l.try_lock (); } + private: boost::detail::spinlock l; diff --git a/libs/pbd/spinlock.cc b/libs/pbd/spinlock.cc index ff6fe51b1b..d42bc8db69 100644 --- a/libs/pbd/spinlock.cc +++ b/libs/pbd/spinlock.cc @@ -16,31 +16,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#ifdef PLATFORM_WINDOWS -#include -#include -#endif - -#include - #include "pbd/spinlock.h" using namespace PBD; -spinlock_t::spinlock_t () -#ifdef BOOST_SMART_PTR_DETAIL_SPINLOCK_STD_ATOMIC_HPP_INCLUDED - /* C++11 non-static data member initialization, - * with non-copyable std::atomic ATOMIC_FLAG_INIT - */ - : l {BOOST_DETAIL_SPINLOCK_INIT} {} -#else - /* default C++ assign struct's first member */ -{ - boost::detail::spinlock init = BOOST_DETAIL_SPINLOCK_INIT; - std::memcpy (&l, &init, sizeof (init)); -} -#endif - SpinLock::SpinLock (spinlock_t& lock) : _lock (lock) {