Updated Group to discard futures instead of failing them upon
destruction.

From: Jiang Yan Xu <y...@jxu.me>
Review: https://reviews.apache.org/r/16345


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/6fcc6b93
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/6fcc6b93
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/6fcc6b93

Branch: refs/heads/master
Commit: 6fcc6b935eb5e32ae017574c263f442fdbaff6a5
Parents: e1767e3
Author: Benjamin Mahler <bmah...@twitter.com>
Authored: Thu Dec 19 16:11:27 2013 -0800
Committer: Benjamin Mahler <bmah...@twitter.com>
Committed: Thu Dec 19 16:11:27 2013 -0800

----------------------------------------------------------------------
 src/zookeeper/group.cpp | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/6fcc6b93/src/zookeeper/group.cpp
----------------------------------------------------------------------
diff --git a/src/zookeeper/group.cpp b/src/zookeeper/group.cpp
index 8590b57..47d599d 100644
--- a/src/zookeeper/group.cpp
+++ b/src/zookeeper/group.cpp
@@ -54,6 +54,19 @@ void fail(queue<T*>* queue, const string& message)
 }
 
 
+// Helper for discarding a queue of promises.
+template <typename T>
+void discard(queue<T*>* queue)
+{
+  while (!queue->empty()) {
+    T* t = queue->front();
+    queue->pop();
+    t->promise.future().discard();
+    delete t;
+  }
+}
+
+
 GroupProcess::GroupProcess(
     const string& _servers,
     const Duration& _timeout,
@@ -94,10 +107,10 @@ GroupProcess::GroupProcess(
 
 GroupProcess::~GroupProcess()
 {
-  fail(&pending.joins, "No longer watching group");
-  fail(&pending.cancels, "No longer watching group");
-  fail(&pending.datas, "No longer watching group");
-  fail(&pending.watches, "No longer watching group");
+  discard(&pending.joins);
+  discard(&pending.cancels);
+  discard(&pending.datas);
+  discard(&pending.watches);
 
   delete zk;
   delete watcher;

Reply via email to