From d382b756c2e832bbb8a5778d704c8310ad19ad57 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 28 Jul 2019 14:57:51 +0200 Subject: [PATCH] Follow up d8ae3fd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Depending on implementation, d8ae3fd may only construct the spinlock once to `sl_init`. Later it is only copy-constructed and that leads to compile and/or runtmime errors. e.g. gcc-8.3 fails to compile error: use of deleted function ‘boost::detail::spinlock::spinlock(const boost::detail::spinlock&)’ --- libs/pbd/pbd/spinlock.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libs/pbd/pbd/spinlock.h b/libs/pbd/pbd/spinlock.h index 7173fde594..69b76ce820 100644 --- a/libs/pbd/pbd/spinlock.h +++ b/libs/pbd/pbd/spinlock.h @@ -32,11 +32,17 @@ namespace PBD { * * initialize with BOOST_DETAIL_SPINLOCK_INIT */ -static boost::detail::spinlock sl_init = BOOST_DETAIL_SPINLOCK_INIT; +#ifdef COMPILER_MSVC +private: + static boost::detail::spinlock sl_init = BOOST_DETAIL_SPINLOCK_INIT; +# define SPINLOCK_INIT sl_init +#else +# define SPINLOCK_INIT BOOST_DETAIL_SPINLOCK_INIT +#endif struct spinlock_t { public: - spinlock_t () : l (sl_init) {}; + spinlock_t () : l (SPINLOCK_INIT) {}; void lock () { l.lock (); } void unlock () { l.unlock (); } bool try_lock () { return l.try_lock (); } @@ -44,6 +50,8 @@ private: boost::detail::spinlock l; }; +#undef SPINLOCK_INIT + /* RAII wrapper */ class LIBPBD_API SpinLock {