You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by di...@apache.org on 2019/01/04 03:07:19 UTC

[rocketmq-client-cpp] branch master updated: Fix push consumer dtor segfault (#50)

This is an automated email from the ASF dual-hosted git repository.

dinglei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-client-cpp.git


The following commit(s) were added to refs/heads/master by this push:
     new 847ef22  Fix push consumer dtor segfault (#50)
847ef22 is described below

commit 847ef22837f3ae3a69df0d64b08d85c14d25120c
Author: messense <me...@icloud.com>
AuthorDate: Fri Jan 4 11:07:15 2019 +0800

    Fix push consumer dtor segfault (#50)
    
    If the push consumer has not been started, deallocate it will segfault in current code.
---
 src/consumer/DefaultMQPushConsumer.cpp | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/consumer/DefaultMQPushConsumer.cpp b/src/consumer/DefaultMQPushConsumer.cpp
index 70c9b88..96e5ec2 100644
--- a/src/consumer/DefaultMQPushConsumer.cpp
+++ b/src/consumer/DefaultMQPushConsumer.cpp
@@ -226,11 +226,21 @@ void DefaultMQPushConsumer::boost_asio_work() {
 
 DefaultMQPushConsumer::~DefaultMQPushConsumer() {
   m_pMessageListener = NULL;
-  deleteAndZero(m_pullmsgQueue);
-  deleteAndZero(m_pRebalance);
-  deleteAndZero(m_pOffsetStore);
-  deleteAndZero(m_pPullAPIWrapper);
-  deleteAndZero(m_consumerService);
+  if (m_pullmsgQueue != NULL) {
+    deleteAndZero(m_pullmsgQueue);
+  }
+  if (m_pRebalance != NULL) {
+    deleteAndZero(m_pRebalance);
+  }
+  if (m_pOffsetStore != NULL) {
+    deleteAndZero(m_pOffsetStore);
+  }
+  if (m_pPullAPIWrapper != NULL) {
+    deleteAndZero(m_pPullAPIWrapper);
+  }
+  if (m_consumerService != NULL) {
+    deleteAndZero(m_consumerService);
+  }
   PullMAP::iterator it = m_PullCallback.begin();
   for (; it != m_PullCallback.end(); ++it) {
     deleteAndZero(it->second);