Destroy promise/future callback functions before waking waiters
[folly.git] / folly / futures / Promise.h
index a2793e2966fa1ff528209f735e27e8a61a9cd73c..75119129df82a69a65f2e8dc6298c0d16f0351e9 100644 (file)
@@ -25,6 +25,12 @@ namespace folly {
 // forward declaration
 template <class T> class Future;
 
+namespace detail {
+struct EmptyConstruct {};
+template <typename T, typename F>
+class CoreCallbackState;
+}
+
 template <class T>
 class Promise {
  public:
@@ -98,6 +104,8 @@ class Promise {
  private:
   typedef typename Future<T>::corePtr corePtr;
   template <class> friend class Future;
+  template <class, class>
+  friend class detail::CoreCallbackState;
 
   // Whether the Future has been retrieved (a one-time operation).
   bool retrieved_;
@@ -105,6 +113,8 @@ class Promise {
   // shared core state object
   corePtr core_;
 
+  explicit Promise(detail::EmptyConstruct) noexcept;
+
   void throwIfFulfilled();
   void throwIfRetrieved();
   void detach();