refactor: reduce unnecessary memory malloc (#432)
diff --git a/src/MQClientAPIImpl.cpp b/src/MQClientAPIImpl.cpp
index 47494fa..19cf3f5 100644
--- a/src/MQClientAPIImpl.cpp
+++ b/src/MQClientAPIImpl.cpp
@@ -229,7 +229,7 @@
SendResult MQClientAPIImpl::sendMessage(const string& addr,
const string& brokerName,
const MQMessage& msg,
- SendMessageRequestHeader* pRequestHeader,
+ const SendMessageRequestHeader& requestHeader,
int timeoutMillis,
int maxRetrySendTimes,
int communicationMode,
@@ -237,9 +237,8 @@
const SessionCredentials& sessionCredentials) {
// RemotingCommand request(SEND_MESSAGE, pRequestHeader);
// Using MQ V2 Protocol to end messages.
- SendMessageRequestHeaderV2* pRequestHeaderV2 = new SendMessageRequestHeaderV2(*pRequestHeader);
+ SendMessageRequestHeaderV2* pRequestHeaderV2 = new SendMessageRequestHeaderV2(requestHeader);
RemotingCommand request(SEND_MESSAGE_V2, pRequestHeaderV2);
- delete pRequestHeader; // delete to avoid memory leak.
string body = msg.getBody();
request.SetBody(body.c_str(), body.length());
request.setMsgBody(body);
diff --git a/src/MQClientAPIImpl.h b/src/MQClientAPIImpl.h
index b8bd883..bf8c892 100644
--- a/src/MQClientAPIImpl.h
+++ b/src/MQClientAPIImpl.h
@@ -72,7 +72,7 @@
virtual SendResult sendMessage(const string& addr,
const string& brokerName,
const MQMessage& msg,
- SendMessageRequestHeader* pRequestHeader,
+ const SendMessageRequestHeader& requestHeader,
int timeoutMillis,
int maxRetrySendTimes,
int communicationMode,
diff --git a/src/producer/DefaultMQProducerImpl.cpp b/src/producer/DefaultMQProducerImpl.cpp
index 87d44f4..0e7c784 100644
--- a/src/producer/DefaultMQProducerImpl.cpp
+++ b/src/producer/DefaultMQProducerImpl.cpp
@@ -481,18 +481,18 @@
}
executeSendMessageHookBefore(pSendMesgContext.get());
}
- SendMessageRequestHeader* requestHeader = new SendMessageRequestHeader();
- requestHeader->producerGroup = getGroupName();
- requestHeader->topic = (msg.getTopic());
- requestHeader->defaultTopic = DEFAULT_TOPIC;
- requestHeader->defaultTopicQueueNums = 4;
- requestHeader->queueId = (mq.getQueueId());
- requestHeader->sysFlag = (msg.getSysFlag());
- requestHeader->bornTimestamp = UtilAll::currentTimeMillis();
- requestHeader->flag = (msg.getFlag());
- requestHeader->consumeRetryTimes = 16;
- requestHeader->batch = isBatchMsg;
- requestHeader->properties = (MQDecoder::messageProperties2String(msg.getProperties()));
+ SendMessageRequestHeader requestHeader;
+ requestHeader.producerGroup = getGroupName();
+ requestHeader.topic = (msg.getTopic());
+ requestHeader.defaultTopic = DEFAULT_TOPIC;
+ requestHeader.defaultTopicQueueNums = 4;
+ requestHeader.queueId = (mq.getQueueId());
+ requestHeader.sysFlag = (msg.getSysFlag());
+ requestHeader.bornTimestamp = UtilAll::currentTimeMillis();
+ requestHeader.flag = (msg.getFlag());
+ requestHeader.consumeRetryTimes = 16;
+ requestHeader.batch = isBatchMsg;
+ requestHeader.properties = (MQDecoder::messageProperties2String(msg.getProperties()));
SendResult sendResult = getFactory()->getMQClientAPIImpl()->sendMessage(
brokerAddr, mq.getBrokerName(), msg, requestHeader, getSendMsgTimeout(), getRetryTimes4Async(),
diff --git a/src/protocol/CommandHeader.h b/src/protocol/CommandHeader.h
index 7ebf54b..9ce4400 100644
--- a/src/protocol/CommandHeader.h
+++ b/src/protocol/CommandHeader.h
@@ -175,7 +175,7 @@
//<!************************************************************************
class SendMessageRequestHeaderV2 : public CommandHeader {
public:
- SendMessageRequestHeaderV2(SendMessageRequestHeader v1) {
+ explicit SendMessageRequestHeaderV2(const SendMessageRequestHeader& v1) {
a = v1.producerGroup;
b = v1.topic;
c = v1.defaultTopic;