sync https://github.com/apache/incubator-heron/pull/2908
diff --git a/heron/common/src/cpp/zookeeper/zkclient.cpp b/heron/common/src/cpp/zookeeper/zkclient.cpp
index 6633520..ee74db4 100644
--- a/heron/common/src/cpp/zookeeper/zkclient.cpp
+++ b/heron/common/src/cpp/zookeeper/zkclient.cpp
@@ -143,8 +143,12 @@
 
 // Destructor.
 ZKClient::~ZKClient() {
-  delete piper_;
   zookeeper_close(zk_handle_);
+  // zookeeper_close() depends on piper_
+  // when HeronZKStateMgr::GlobalWatchEventHandler() and GetCompletionWatcher
+  // are called at the same time in two threads,
+  // thus `delete piper_` after zookeeper_close() joins all zk_client threads.
+  delete piper_;
 }
 
 //