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

Reply via email to