Hi Minh, ACK from me.
Best Regards, ThuanTr -----Original Message----- From: Minh Chau <minh.c...@dektech.com.au> Sent: Monday, November 25, 2019 1:13 PM To: thuan.t...@dektech.com.au; gary....@dektech.com.au; vu.m.ngu...@dektech.com.au Cc: opensaf-devel@lists.sourceforge.net; Minh Chau <minh.c...@dektech.com.au> Subject: [PATCH 1/1] mds: Avoid message re-allocation [#3089] The patch avoids message reallocation if enable MDS_TIPC_FCTRL_ENABLED --- src/mds/mds_dt_tipc.c | 27 ++++++++++++++++++++------- src/mds/mds_tipc_fctrl_msg.cc | 2 +- src/mds/mds_tipc_fctrl_portid.cc | 9 +++------ 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/mds/mds_dt_tipc.c b/src/mds/mds_dt_tipc.c index fdf0da7..aa8d5c2 100644 --- a/src/mds/mds_dt_tipc.c +++ b/src/mds/mds_dt_tipc.c @@ -2644,7 +2644,7 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ *req) if (req->snd_type == MDS_SENDTYPE_ACK || req->snd_type == MDS_SENDTYPE_RACK) { uint8_t len = sum_mds_hdr_plus_mdtm_hdr_plus_len; - uint8_t buffer_ack[len]; + uint8_t* buffer_ack = calloc(1, len); /* Add mds_hdr */ if (NCSCC_RC_SUCCESS != @@ -2667,7 +2667,11 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ *req) m_MDS_LOG_DBG( "MDTM:Sending message with Service Seqno=%d, TO Dest_Tipc_id=<0x%08x:%u> ", req->svc_seq_num, tipc_id.node, tipc_id.ref); - return mdtm_sendto(buffer_ack, len, tipc_id); + status = mdtm_sendto(buffer_ack, len, tipc_id); + if (gl_mds_pro_ver != MDS_PROT_FCTRL) { + free(buffer_ack); + } + return status; } if (MDS_ENC_TYPE_FLAT == req->msg.encoding) { @@ -2815,6 +2819,8 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ *req) free(body); return NCSCC_RC_FAILURE; } + m_MMGR_FREE_BUFR_LIST(usrbuf); + free(body); } else { if (NCSCC_RC_SUCCESS != mdtm_sendto(body, len, tipc_id)) { @@ -2824,9 +2830,12 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ *req) free(body); return NCSCC_RC_FAILURE; } + if (gl_mds_pro_ver != MDS_PROT_FCTRL) { + m_MMGR_FREE_BUFR_LIST(usrbuf); + free(body); + } } - m_MMGR_FREE_BUFR_LIST(usrbuf); - free(body); + return NCSCC_RC_SUCCESS; } } break; @@ -2909,7 +2918,9 @@ uint32_t mds_mdtm_send_tipc(MDTM_SEND_REQ *req) mds_free_direct_buff( req->msg.data.buff_info.buff); } - free(body); + if (gl_mds_pro_ver != MDS_PROT_FCTRL) { + free(body); + } return NCSCC_RC_SUCCESS; } break; @@ -3059,21 +3070,23 @@ uint32_t mdtm_frag_and_send(MDTM_SEND_REQ *req, uint32_t seq_num, get_svc_names(req->src_svc_id), req->src_svc_id, get_svc_names(req->dest_svc_id), req->dest_svc_id); ret = mdtm_mcast_sendto(body, len_buf, req); + free(body); } else { m_MDS_LOG_DBG( "MDTM:Sending message with Service Seqno=%d, Fragment Seqnum=%d, frag_num=%d, TO Dest_Tipc_id=<0x%08x:%u>", req->svc_seq_num, seq_num, frag_val, id.node, id.ref); ret = mdtm_sendto(body, len_buf, id); + if (gl_mds_pro_ver != MDS_PROT_FCTRL) { + free(body); + } } if (ret != NCSCC_RC_SUCCESS) { // Failed to send a fragmented msg, stop sending m_MMGR_FREE_BUFR_LIST(usrbuf); - free(body); break; } m_MMGR_REMOVE_FROM_START(&usrbuf, len_buf - hdr_plus); - free(body); len = len - (len_buf - hdr_plus); if (len == 0) break; diff --git a/src/mds/mds_tipc_fctrl_msg.cc b/src/mds/mds_tipc_fctrl_msg.cc index 454c02c..0f9fd09 100644 --- a/src/mds/mds_tipc_fctrl_msg.cc +++ b/src/mds/mds_tipc_fctrl_msg.cc @@ -138,7 +138,7 @@ void DataMessage::Decode(uint8_t *msg) { DataMessage::~DataMessage() { if (msg_data_ != nullptr) { - delete[] msg_data_; + free(msg_data_); msg_data_ = nullptr; } } diff --git a/src/mds/mds_tipc_fctrl_portid.cc b/src/mds/mds_tipc_fctrl_portid.cc index 724eb7b..08e8dce 100644 --- a/src/mds/mds_tipc_fctrl_portid.cc +++ b/src/mds/mds_tipc_fctrl_portid.cc @@ -175,13 +175,12 @@ uint32_t TipcPortId::Queue(const uint8_t* data, uint16_t length, DataMessage *msg = new DataMessage; msg->header_.Decode(const_cast<uint8_t*>(data)); msg->Decode(const_cast<uint8_t*>(data)); - msg->msg_data_ = new uint8_t[length]; msg->is_sent_ = is_sent; - memcpy(msg->msg_data_, data, length); + msg->msg_data_ = const_cast<uint8_t*>(data); sndqueue_.Queue(msg); + ++sndwnd_.send_; + sndwnd_.nacked_space_ += length; if (is_sent) { - ++sndwnd_.send_; - sndwnd_.nacked_space_ += length; m_MDS_LOG_DBG("FCTRL: [me] --> [node:%x, ref:%u], " "SndData[mseq:%u, mfrag:%u, fseq:%u, len:%u], " "sndwnd[acked:%u, send:%u, nacked:%" PRIu64 "]", @@ -189,8 +188,6 @@ uint32_t TipcPortId::Queue(const uint8_t* data, uint16_t length, msg->header_.mseq_, msg->header_.mfrag_, msg->header_.fseq_, length, sndwnd_.acked_.v(), sndwnd_.send_.v(), sndwnd_.nacked_space_); } else { - ++sndwnd_.send_; - sndwnd_.nacked_space_ += length; m_MDS_LOG_NOTIFY("FCTRL: [me] --> [node:%x, ref:%u], " "QueData[mseq:%u, mfrag:%u, fseq:%u, len:%u], " "sndwnd[acked:%u, send:%u, nacked:%" PRIu64 "]", -- 2.7.4 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel