Hi Thuan, m_MMGR_REMOVE_FROM_START() is just removed n bytes from the start, not whole memory chain.
You can refer to descriptions of these macros to see the differences b/w them. Regards, Vu > -----Original Message----- > From: Tran Thuan <thuan.t...@dektech.com.au> > Sent: Wednesday, April 24, 2019 2:17 PM > To: 'Vu Minh Nguyen' <vu.m.ngu...@dektech.com.au>; > hans.nordeb...@ericsson.com; 'Minh Hon Chau' <minh- > c...@users.sourceforge.net> > Cc: opensaf-devel@lists.sourceforge.net > Subject: RE: [PATCH 1/1] mds: support multicast fragmented messages > [#3033] > > Hi bro.Vu, > > I think it won't cause memleak since I break after > m_MMGR_REMOVE_FROM_START() > free(body) > > Best Regards, > ThuanTr > > -----Original Message----- > From: Vu Minh Nguyen <vu.m.ngu...@dektech.com.au> > Sent: Wednesday, April 24, 2019 1:45 PM > To: 'thuan.tran' <thuan.t...@dektech.com.au>; > hans.nordeb...@ericsson.com; > 'Minh Hon Chau' <minh-c...@users.sourceforge.net> > Cc: opensaf-devel@lists.sourceforge.net > Subject: RE: [PATCH 1/1] mds: support multicast fragmented messages > [#3033] > > Hi Thuan, > > Tested broadcasting with large packages (each 1M). > > Ack with below comments. > > Regards, Vu > > > -----Original Message----- > > From: thuan.tran <thuan.t...@dektech.com.au> > > Sent: Wednesday, April 24, 2019 12:00 PM > > To: hans.nordeb...@ericsson.com; Vu Minh Nguyen > > <vu.m.ngu...@dektech.com.au>; Minh Hon Chau <minh- > > c...@users.sourceforge.net> > > Cc: opensaf-devel@lists.sourceforge.net; thuan.tran > > <thuan.t...@dektech.com.au> > > Subject: [PATCH 1/1] mds: support multicast fragmented messages > > [#3033] > > > > - Sender may send broadcast big messages (> 65K) then small messages > > (< 65K). > > Current MDS just loop via all destinations to unicast all fragmented > messages > > to one by one destinations. But sending multicast non-fragment > > messages to all destinations. Therefor, receivers may get messages > > with incorrect order, non-fragment messages may come before > fragmented > > messages. > > For example, it may lead to OUT OF ORDER for IMMNDs during IMMD sync. > > - Solution: support send multicast each fragmented messages to avoid > > disorder of arrived broadcast messages. > > --- > > src/mds/mds_c_sndrcv.c | 3 +-- > > src/mds/mds_dt_tipc.c | 55 > > ++++++++++++++++++++++++++++++++++++++++---------- > > 2 files changed, 45 insertions(+), 13 deletions(-) > > > > diff --git a/src/mds/mds_c_sndrcv.c b/src/mds/mds_c_sndrcv.c index > > 703bc8e..7850ac7 100644 > > --- a/src/mds/mds_c_sndrcv.c > > +++ b/src/mds/mds_c_sndrcv.c > > @@ -4496,8 +4496,7 @@ static uint32_t > > mcm_pvt_process_svc_bcast_common( > > info_result->key.vdest_id, > req, 0, > > info_result->key.adest, pri); > > if ((svc_cb->subtn_info->prev_ver_sub_count == 0) && > > - (tipc_mode_enabled) && (tipc_mcast_enabled) && > > - (to_msg.bcast_buff_len < MDS_DIRECT_BUF_MAXSIZE)) { > > + (tipc_mode_enabled) && (tipc_mcast_enabled)) { > > m_MDS_LOG_DBG( > > "MDTM: Break while(1) prev_ver_sub_count: %d > svc_id =%s(%d) > > to_msg.bcast_buff_len: %d ", > > svc_cb->subtn_info->prev_ver_sub_count, > > diff --git a/src/mds/mds_dt_tipc.c b/src/mds/mds_dt_tipc.c index > > a3abff5..656f79c 100644 > > --- a/src/mds/mds_dt_tipc.c > > +++ b/src/mds/mds_dt_tipc.c > > @@ -2856,6 +2856,7 @@ uint32_t > mdtm_frag_and_send(MDTM_SEND_REQ *req, > > uint32_t seq_num, > > uint16_t frag_val = 0; > > uint32_t sum_mds_hdr_plus_mdtm_hdr_plus_len; > > int version = req->msg_arch_word & 0x7; > > + uint32_t ret = NCSCC_RC_SUCCESS; > > > > if (version > 1) { > > sum_mds_hdr_plus_mdtm_hdr_plus_len = @@ -2952,11 > +2953,23 @@ > > > uint32_t mdtm_frag_and_send(MDTM_SEND_REQ *req, uint32_t seq_num, > > free(body); > > return NCSCC_RC_FAILURE; > > } > > - 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); > > - mdtm_sendto(body, len_buf, id); > > + if (((req->snd_type == MDS_SENDTYPE_RBCAST) > > || > > + (req->snd_type == MDS_SENDTYPE_BCAST)) > > && > > + (version > 0) && (tipc_mcast_enabled)) { > > + m_MDS_LOG_DBG( > > + "MDTM:Send Multicast message > with > > Service Seqno=%d, Fragment Seqnum=%d, frag_num=%d " > > + "From svc_id = %s(%d) TO svc_id > = > > %s(%d)", > > + req->svc_seq_num, seq_num, > > frag_val, > > + 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); > > + } 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); > > + } > > m_MMGR_REMOVE_FROM_START( > > &usrbuf, > > len_buf - > > @@ -2965,6 +2978,9 @@ uint32_t > mdtm_frag_and_send(MDTM_SEND_REQ *req, > > uint32_t seq_num, > > len = > > len - (len_buf - > > > > sum_mds_hdr_plus_mdtm_hdr_plus_len); > > + if (ret != NCSCC_RC_SUCCESS) > > + // Failed to send a fragmented msg, > stop > > sending > [Vu] memory leak? should free here all memories of userbuf by > m_MMGR_FREE_BUFR_LIST(usrbuf); > > + break; > > } else { > > p8 = (uint8_t *)m_MMGR_DATA_AT_START( > > usrbuf, len_buf - > > MDTM_FRAG_HDR_PLUS_LEN_2, > > @@ -2984,11 +3000,23 @@ uint32_t > > mdtm_frag_and_send(MDTM_SEND_REQ *req, uint32_t seq_num, > > free(body); > > return NCSCC_RC_FAILURE; > > } > > - 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); > > - mdtm_sendto(body, len_buf, id); > > + if (((req->snd_type == MDS_SENDTYPE_RBCAST) > > || > > + (req->snd_type == MDS_SENDTYPE_BCAST)) > > && > > + (version > 0) && (tipc_mcast_enabled)) { > > + m_MDS_LOG_DBG( > > + "MDTM:Send Multicast message > with > > Service Seqno=%d, Fragment Seqnum=%d, frag_num=%d " > > + "From svc_id = %s(%d) TO svc_id > = > > %s(%d)", > > + req->svc_seq_num, seq_num, > > frag_val, > > + 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); > > + } 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); > > + } > > m_MMGR_REMOVE_FROM_START( > > &usrbuf, > > (len_buf - MDTM_FRAG_HDR_PLUS_LEN_2)); > @@ -2997,12 +3025,15 > > @@ uint32_t mdtm_frag_and_send(MDTM_SEND_REQ *req, uint32_t > seq_num, > > len - (len_buf - > > MDTM_FRAG_HDR_PLUS_LEN_2); > > if (len == 0) > > break; > > + if (ret != NCSCC_RC_SUCCESS) > > + // Failed to send a fragmented msg, > stop > > sending > [Vu] memory leak? should free here all memories of userbuf by > m_MMGR_FREE_BUFR_LIST(usrbuf); > > Regards, Vu > > + break; > > } > > } > > i++; > > frag_val = 0; > > } > > - return NCSCC_RC_SUCCESS; > > + return ret; > > } > > > > /********************************************************* > > @@ -3134,6 +3165,8 @@ static uint32_t mdtm_mcast_sendto(void > *buffer, > > size_t size, > > m_MDS_LOG_INFO("MDTM: Successfully sent message"); > > return NCSCC_RC_SUCCESS; > > } else { > > + m_MDS_LOG_ERR("MDTM: Failed to send Multicast message > > err :%s", > > + strerror(errno)); > > return NCSCC_RC_FAILURE; > > } > > } > > -- > > 2.7.4 > > _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel