You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by GitBox <gi...@apache.org> on 2019/01/14 08:48:25 UTC

[rocketmq-client-cpp] Diff for: [GitHub] ShannonDing merged pull request #59: [ISSUE #52]Fix infinite loop on tcptransport connect

diff --git a/src/transport/TcpTransport.cpp b/src/transport/TcpTransport.cpp
index 011c4202..2c148e7c 100644
--- a/src/transport/TcpTransport.cpp
+++ b/src/transport/TcpTransport.cpp
@@ -35,7 +35,7 @@ TcpTransport::TcpTransport(TcpRemotingClient *pTcpRemointClient,
       m_event_base_cv(),
       m_ReadDatathread(NULL),
       m_readcallback(handle),
-      m_tcpRemotingClient(pTcpRemointClient){
+      m_tcpRemotingClient(pTcpRemointClient) {
   m_startTime = UtilAll::currentTimeMillis();
 #ifdef WIN32
   evthread_use_windows_threads();
@@ -87,12 +87,14 @@ tcpConnectStatus TcpTransport::connect(const string &strServerURL,
     LOG_INFO("try to connect to fd:%d, addr:%s", fd, (hostName.c_str()));
 
     evthread_make_base_notifiable(m_eventBase);
-    
-    m_ReadDatathread = new boost::thread(boost::bind(&TcpTransport::runThread, this));
-    
-    while(!m_event_base_status) {
+
+    m_ReadDatathread =
+        new boost::thread(boost::bind(&TcpTransport::runThread, this));
+
+    while (!m_event_base_status) {
       LOG_INFO("Wait till event base is looping");
-      boost::system_time const timeout=boost::get_system_time()+ boost::posix_time::milliseconds(1000);
+      boost::system_time const timeout =
+          boost::get_system_time() + boost::posix_time::milliseconds(1000);
       boost::unique_lock<boost::mutex> lock(m_event_base_mtx);
       m_event_base_cv.timed_wait(lock, timeout);
     }
@@ -180,23 +182,20 @@ void TcpTransport::exitBaseDispatch() {
 }
 
 void TcpTransport::runThread() {
-  while (m_ReadDatathread) {
-    if (m_eventBase != NULL) {
-      
-      if (!m_event_base_status) {
-        boost::mutex::scoped_lock lock(m_event_base_mtx);
-        m_event_base_status.store(true);
-        m_event_base_cv.notify_all();
-        LOG_INFO("Notify on event_base_dispatch");
-      }
-      event_base_dispatch(m_eventBase);
-      // event_base_loop(m_eventBase, EVLOOP_ONCE);//EVLOOP_NONBLOCK should not
-      // be used, as could not callback event immediatly
+  if (m_eventBase != NULL) {
+    if (!m_event_base_status) {
+      boost::mutex::scoped_lock lock(m_event_base_mtx);
+      m_event_base_status.store(true);
+      m_event_base_cv.notify_all();
+      LOG_INFO("Notify on event_base_dispatch");
     }
-    LOG_INFO("event_base_dispatch exit once");
-    boost::this_thread::sleep(boost::posix_time::milliseconds(1));
-    if (getTcpConnectStatus() != e_connectSuccess) return;
+    event_base_dispatch(m_eventBase);
+    // event_base_loop(m_eventBase, EVLOOP_ONCE);//EVLOOP_NONBLOCK should not
+    // be used, as could not callback event immediatly
   }
+  LOG_INFO("event_base_dispatch exit once");
+  boost::this_thread::sleep(boost::posix_time::milliseconds(1));
+  if (getTcpConnectStatus() != e_connectSuccess) return;
 }
 
 void TcpTransport::timeoutcb(evutil_socket_t fd, short what, void *arg) {
@@ -349,4 +348,4 @@ const string TcpTransport::getPeerAddrAndPort() {
 
 const uint64_t TcpTransport::getStartTime() const { return m_startTime; }
 
-}  //<!end namespace;
+}  // namespace rocketmq


With regards,
Apache Git Services