This is an automated email from the ASF dual-hosted git repository.
ifplusor 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 c7777af fix: connect concurrently failed (#451)
c7777af is described below
commit c7777af437156841ba2f15d004d0aa0a16d4b4e6
Author: yuz10 <[email protected]>
AuthorDate: Fri Oct 6 15:48:24 2023 +0800
fix: connect concurrently failed (#451)
---
src/transport/TcpRemotingClient.cpp | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/transport/TcpRemotingClient.cpp
b/src/transport/TcpRemotingClient.cpp
index fa2bfc8..a077406 100644
--- a/src/transport/TcpRemotingClient.cpp
+++ b/src/transport/TcpRemotingClient.cpp
@@ -319,8 +319,7 @@ std::shared_ptr<TcpTransport>
TcpRemotingClient::CreateTransport(const string& a
if (connectStatus == TCP_CONNECT_STATUS_SUCCESS) {
return tcp;
} else if (connectStatus == TCP_CONNECT_STATUS_WAIT) {
- std::shared_ptr<TcpTransport> pTcp;
- return pTcp;
+ tts = tcp;
} else if (connectStatus == TCP_CONNECT_STATUS_FAILED) {
LOG_ERROR("tcpTransport with server disconnected, erase server:%s",
addr.c_str());
tcp->disconnect(addr); // avoid coredump when connection with
broker was broken
@@ -334,17 +333,18 @@ std::shared_ptr<TcpTransport>
TcpRemotingClient::CreateTransport(const string& a
//<!callback;
TcpTransportReadCallback callback = needResponse ?
&TcpRemotingClient::static_messageReceived : nullptr;
-
- tts = TcpTransport::CreateTransport(this, m_enableSsl, m_sslPropertyFile,
callback);
- TcpConnectStatus connectStatus = tts->connect(addr, 0); // use non-block
- if (connectStatus != TCP_CONNECT_STATUS_WAIT) {
- LOG_WARN("can not connect to:%s", addr.c_str());
- tts->disconnect(addr);
- std::shared_ptr<TcpTransport> pTcp;
- return pTcp;
- } else {
- // even if connecting failed finally, this server transport will be
erased by next CreateTransport
- m_tcpTable[addr] = tts;
+ if (!tts) {
+ tts = TcpTransport::CreateTransport(this, m_enableSsl,
m_sslPropertyFile, callback);
+ TcpConnectStatus connectStatus = tts->connect(addr, 0); // use non-block
+ if (connectStatus != TCP_CONNECT_STATUS_WAIT) {
+ LOG_WARN("can not connect to:%s", addr.c_str());
+ tts->disconnect(addr);
+ std::shared_ptr<TcpTransport> pTcp;
+ return pTcp;
+ } else {
+ // even if connecting failed finally, this server transport will be
erased by next CreateTransport
+ m_tcpTable[addr] = tts;
+ }
}
}