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;