Another try at fixing our 'spinlock_t' compatibility

This commit is contained in:
John Emmas 2019-07-29 16:56:45 +01:00
parent 82bdb48dab
commit bf5da033dc
2 changed files with 16 additions and 22 deletions

View File

@ -20,6 +20,8 @@
#define _pbd_spinlock_h_
#include <boost/smart_ptr/detail/spinlock.hpp>
#include <cstring>
#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;

View File

@ -16,31 +16,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifdef PLATFORM_WINDOWS
#include <windows.h>
#include <malloc.h>
#endif
#include <cstring>
#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)
{