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&)’
This commit is contained in:
Robin Gareus
2019-07-28 14:57:51 +02:00
parent d8ae3fd3a6
commit d382b756c2

View File

@@ -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 {