(wangle) Future/Promise detachment
[folly.git] / folly / wangle / Future-inl.h
index c3002f48e15eea54bc55f8dbbba3f56d6e1dab15..1e17e7cb40d4c3c8769a7caa35fe0200df40b6c2 100644 (file)
@@ -32,8 +32,8 @@ struct isFuture<Future<T> > {
 };
 
 template <class T>
-Future<T>::Future(Future<T>&& other) noexcept : state_(other.state_) {
-  other.state_ = nullptr;
+Future<T>::Future(Future<T>&& other) noexcept : state_(nullptr) {
+  *this = std::move(other);
 }
 
 template <class T>
@@ -44,8 +44,14 @@ Future<T>& Future<T>::operator=(Future<T>&& other) {
 
 template <class T>
 Future<T>::~Future() {
+  detach();
+}
+
+template <class T>
+void Future<T>::detach() {
   if (state_) {
-    setCallback_([](Try<T>&&) {}); // detach
+    state_->detachFuture();
+    state_ = nullptr;
   }
 }
 
@@ -60,7 +66,6 @@ template <class F>
 void Future<T>::setCallback_(F&& func) {
   throwIfInvalid();
   state_->setCallback(std::move(func));
-  state_ = nullptr;
 }
 
 template <class T>