Let Futex import base-class ctors
authorYedidya Feldblum <yfeldblum@fb.com>
Wed, 10 Jan 2018 20:05:34 +0000 (12:05 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Wed, 10 Jan 2018 20:18:31 +0000 (12:18 -0800)
Summary:
[Folly] Let `Futex` import base-class ctors.

Rather than needing to define ctors and inherit `boost::noncopyable`.

Reviewed By: WillerZ

Differential Revision: D6674054

fbshipit-source-id: 59e0a4815682b227346954fe47c6eda49e3ad62f

folly/SharedMutex.h
folly/SpinLock.h
folly/concurrency/DynamicBoundedQueue.h
folly/detail/Futex.h
folly/experimental/FlatCombiningPriorityQueue.h
folly/fibers/Baton.h
folly/synchronization/detail/ThreadCachedInts.h

index ce160f8..976c6e0 100644 (file)
@@ -563,7 +563,7 @@ class SharedMutexImpl {
   };
 
   // 32 bits of state
-  Futex state_;
+  Futex state_{};
 
   // S count needs to be on the end, because we explicitly allow it to
   // underflow.  This can occur while we are in the middle of applying
index 3df5d4e..a735fcd 100644 (file)
@@ -34,6 +34,8 @@
 
 #include <type_traits>
 
+#include <boost/noncopyable.hpp>
+
 #include <folly/Portability.h>
 #include <folly/SmallLocks.h>
 
index e6634b8..18ff492 100644 (file)
@@ -330,7 +330,8 @@ class DynamicBoundedQueue {
         capacity_(capacity + threshold(capacity)), // capacity slack
         credit_(0),
         threshold_(threshold(capacity)),
-        transfer_(0) {}
+        transfer_(0),
+        waiting_(0) {}
 
   /** destructor */
   ~DynamicBoundedQueue() {}
index 630ad69..de0c78f 100644 (file)
@@ -22,8 +22,6 @@
 #include <limits>
 #include <type_traits>
 
-#include <boost/noncopyable.hpp>
-
 #include <folly/portability/Unistd.h>
 
 namespace folly { namespace detail {
@@ -45,9 +43,8 @@ enum class FutexResult {
  * (and benchmarks to back you up).
  */
 template <template <typename> class Atom = std::atomic>
-struct Futex : Atom<uint32_t>, boost::noncopyable {
-
-  explicit constexpr Futex(uint32_t init = 0) : Atom<uint32_t>(init) {}
+struct Futex : Atom<uint32_t> {
+  using Atom<uint32_t>::Atom;
 
   /** Puts the thread to sleep if this->load() == expected.  Returns true when
    *  it is returning because it has consumed a wake() event, false for any
index a8c3c12..5e57e31 100644 (file)
@@ -171,8 +171,8 @@ class FlatCombiningPriorityQueue
  private:
   size_t maxSize_;
   PriorityQueue pq_;
-  detail::Futex<Atom> empty_;
-  detail::Futex<Atom> full_;
+  detail::Futex<Atom> empty_{};
+  detail::Futex<Atom> full_{};
 
   bool isTrue(detail::Futex<Atom>& futex) {
     return futex.load(std::memory_order_relaxed) != 0;
index 286ded7..65694b6 100644 (file)
@@ -258,7 +258,7 @@ class Baton {
   union {
     std::atomic<intptr_t> waitingFiber_;
     struct {
-      folly::detail::Futex<> futex;
+      folly::detail::Futex<> futex{};
       int32_t _unused_packing;
     } futex_;
   };
index 1e6b0fb..1363cc1 100644 (file)
@@ -38,7 +38,7 @@ template <typename Tag>
 class ThreadCachedInts {
   std::atomic<int64_t> orphan_inc_[2];
   std::atomic<int64_t> orphan_dec_[2];
-  folly::detail::Futex<> waiting_;
+  folly::detail::Futex<> waiting_{0};
 
   class Integer {
    public: