Reset context shared_ptr in AsyncTimeout::cancelTimeout()
[folly.git] / folly / SpinLock.h
index ef35a48578aae405d838628f306270bfd22a7688..3df5d4e1c6a10b99f0bb269a937c0bd4fa7cb8af 100644 (file)
 
 #include <type_traits>
 
-#include <folly/detail/SpinLockImpl.h>
+#include <folly/Portability.h>
+#include <folly/SmallLocks.h>
 
 namespace folly {
 
-#if __x86_64__
-typedef SpinLockMslImpl SpinLock;
-#elif __APPLE__
-typedef SpinLockAppleImpl SpinLock;
-#elif FOLLY_HAVE_PTHREAD_SPINLOCK_T
-typedef SpinLockPthreadImpl SpinLock;
-#else
-typedef SpinLockPthreadMutexImpl SpinLock;
-#endif
+class SpinLock {
+ public:
+  FOLLY_ALWAYS_INLINE SpinLock() {
+    lock_.init();
+  }
+  FOLLY_ALWAYS_INLINE void lock() const {
+    lock_.lock();
+  }
+  FOLLY_ALWAYS_INLINE void unlock() const {
+    lock_.unlock();
+  }
+  FOLLY_ALWAYS_INLINE bool try_lock() const {
+    return lock_.try_lock();
+  }
+
+ private:
+  mutable folly::MicroSpinLock lock_;
+};
 
 template <typename LOCK>
 class SpinLockGuardImpl : private boost::noncopyable {
@@ -64,4 +74,4 @@ class SpinLockGuardImpl : private boost::noncopyable {
 
 typedef SpinLockGuardImpl<SpinLock> SpinLockGuard;
 
-}
+} // namespace folly