- Fix #3208 to solve MBC memleak will cause agent crash if
MDS sendto() error return.
- Update a part of fix #3208 to check MDS encode callback
done then not need to free memory as MDS already freed.
---
 src/mbc/mbcsv_mds.c  | 2 ++
 src/mbc/mbcsv_util.c | 9 ++++++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/mbc/mbcsv_mds.c b/src/mbc/mbcsv_mds.c
index afaf1fd1b..2e5121cfc 100644
--- a/src/mbc/mbcsv_mds.c
+++ b/src/mbc/mbcsv_mds.c
@@ -37,6 +37,7 @@
 
 #include "mbcsv.h"
 
+extern bool mds_enc_cb_done;
 MDS_CLIENT_MSG_FORMAT_VER
 MBCSV_wrt_PEER_msg_fmt_array[MBCSV_WRT_PEER_SUBPART_VER_RANGE] = {
     1 /* msg format version for subpart version */
@@ -706,6 +707,7 @@ uint32_t mbcsv_mds_enc(MDS_CLIENT_HDL yr_svc_hdl, 
NCSCONTEXT msg,
                    NCS_MBCSV_MSG_SYNC_SEND_RSP)
                        ncs_enc_append_usrbuf(
                            uba, mm->info.peer_msg.info.client_msg.uba.start);
+               mds_enc_cb_done = true;
 
                break;
        }
diff --git a/src/mbc/mbcsv_util.c b/src/mbc/mbcsv_util.c
index 9ce79243f..8373b6155 100644
--- a/src/mbc/mbcsv_util.c
+++ b/src/mbc/mbcsv_util.c
@@ -40,6 +40,7 @@
 #include "mbcsv.h"
 #include "base/ncssysf_mem.h"
 
+bool mds_enc_cb_done;
 /**************************************************************************\
 * PROCEDURE: mbcsv_rmv_reg_inst
 *
@@ -492,6 +493,7 @@ uint32_t 
mbcsv_send_ckpt_data_to_all_peers(NCS_MBCSV_SEND_CKPT *msg_to_send,
                                    *uba;
                                evt_msg.info.peer_msg.info.client_msg.uba
                                    .start = dup_ub;
+                               mds_enc_cb_done = false;
 
                                switch (msg_to_send->i_send_type) {
                                case NCS_MBCSV_SND_SYNC: {
@@ -513,8 +515,7 @@ uint32_t 
mbcsv_send_ckpt_data_to_all_peers(NCS_MBCSV_SEND_CKPT *msg_to_send,
                                }
                                tmp_ptr->ckpt_msg_sent = true;
                        }
-                       if ((rc != NCSCC_RC_SUCCESS) &&
-                           (rc != NCSCC_RC_REQ_TIMOUT)) {
+                       if (rc != NCSCC_RC_SUCCESS && !mds_enc_cb_done) {
                                m_MMGR_FREE_BUFR_LIST(dup_ub);
                        }
                        tmp_ptr = tmp_ptr->next;
@@ -741,10 +742,12 @@ uint32_t mbcsv_send_notify_msg(uint32_t msg_dest, 
CKPT_INST *ckpt_inst,
                                            .uba = *uba;
                                        evt_msg.info.peer_msg.info.client_msg
                                            .uba.start = dup_ub;
+                                       mds_enc_cb_done = false;
 
                                        if (m_NCS_MBCSV_MDS_ASYNC_SEND(
                                            &evt_msg, ckpt_inst,
-                                           peer->peer_anchor) != 
NCSCC_RC_SUCCESS)
+                                           peer->peer_anchor) != 
NCSCC_RC_SUCCESS &&
+                                           !mds_enc_cb_done)
                                                m_MMGR_FREE_BUFR_LIST(dup_ub);
                                }
                        }
-- 
2.17.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to