---
 src/mbc/mbcsv_act.c     |  5 +++++
 src/mbc/mbcsv_evt_msg.h |  1 +
 src/mbc/mbcsv_mds.c     | 15 ++++++++++++---
 src/mbc/mbcsv_pr_evts.c |  3 ++-
 src/mbc/mbcsv_queue.c   | 13 +++++++++----
 src/mbc/mbcsv_util.c    | 18 ++++++++++++------
 6 files changed, 41 insertions(+), 14 deletions(-)

diff --git a/src/mbc/mbcsv_act.c b/src/mbc/mbcsv_act.c
index d58f502d2..ae0e8e539 100644
--- a/src/mbc/mbcsv_act.c
+++ b/src/mbc/mbcsv_act.c
@@ -77,6 +77,11 @@ void ncs_mbcsv_null_func(PEER_INST *peer, MBCSV_EVT *evt)
              peer->my_ckpt_inst->my_role,
              peer->my_ckpt_inst->my_mbcsv_inst->svc_id,
              peer->my_ckpt_inst->pwe_hdl);
+       if ((evt) && (evt->msg_type == MBCSV_EVT_INTERNAL_RCV) &&
+           (evt->info.peer_msg.type == MBCSV_EVT_INTERNAL_CLIENT)) {
+               m_MMGR_FREE_BUFR_LIST(
+                   evt->info.peer_msg.info.client_msg.uba.ub);
+       }
 }
 
 /*****************************************************************************
diff --git a/src/mbc/mbcsv_evt_msg.h b/src/mbc/mbcsv_evt_msg.h
index 9eef74713..b9addb3a4 100644
--- a/src/mbc/mbcsv_evt_msg.h
+++ b/src/mbc/mbcsv_evt_msg.h
@@ -49,6 +49,7 @@ typedef enum {
   MBCSV_EVT_MDS_SUBSCR,
   MBCSV_EVT_TMR,
   MBCSV_EVT_INTERNAL,
+  MBCSV_EVT_INTERNAL_RCV,
 } MBCSV_EVT_TYPE;
 
 typedef struct mbcsv_evt_tmr_info {
diff --git a/src/mbc/mbcsv_mds.c b/src/mbc/mbcsv_mds.c
index 964e33542..afaf1fd1b 100644
--- a/src/mbc/mbcsv_mds.c
+++ b/src/mbc/mbcsv_mds.c
@@ -193,6 +193,7 @@ void mbcsv_mds_unreg(uint32_t pwe_hdl)
 uint32_t mbcsv_mds_send_msg(uint32_t send_type, MBCSV_EVT *msg, CKPT_INST 
*ckpt,
                            MBCSV_ANCHOR anchor)
 {
+       uint32_t rc;
        NCSMDS_INFO mds_info;
        TRACE_ENTER2("sending to vdest:%" PRIx64, ckpt->my_vdest);
 
@@ -241,7 +242,7 @@ uint32_t mbcsv_mds_send_msg(uint32_t send_type, MBCSV_EVT 
*msg, CKPT_INST *ckpt,
                return NCSCC_RC_FAILURE;
        }
 
-       if (ncsmds_api(&mds_info) == NCSCC_RC_SUCCESS) {
+       if ((rc = ncsmds_api(&mds_info)) == NCSCC_RC_SUCCESS) {
                /* If message is send resp  then free the message received in
                 * response  */
                if ((MDS_SENDTYPE_REDRSP == send_type) &&
@@ -253,7 +254,7 @@ uint32_t mbcsv_mds_send_msg(uint32_t send_type, MBCSV_EVT 
*msg, CKPT_INST *ckpt,
                return NCSCC_RC_SUCCESS;
        } else {
                TRACE_LEAVE2("failure");
-               return NCSCC_RC_FAILURE;
+               return rc;
        }
 }
 
@@ -379,7 +380,7 @@ uint32_t mbcsv_mds_rcv(NCSMDS_CALLBACK_INFO *cbinfo)
                 * We found out the mailbox to which we can post a message. Now
                 * construct and send this message to the mailbox.
                 */
-               msg->msg_type = MBCSV_EVT_INTERNAL;
+               msg->msg_type = MBCSV_EVT_INTERNAL_RCV;
 
                if (msg->info.peer_msg.type == MBCSV_EVT_INTERNAL_PEER_DISC) {
                        send_pri = NCS_IPC_PRIORITY_HIGH;
@@ -387,11 +388,19 @@ uint32_t mbcsv_mds_rcv(NCSMDS_CALLBACK_INFO *cbinfo)
                        send_pri = NCS_IPC_PRIORITY_NORMAL;
 
                if (NCSCC_RC_SUCCESS != m_MBCSV_SND_MSG(&mbx, msg, send_pri)) {
+                       if (msg->info.peer_msg.type == 
MBCSV_EVT_INTERNAL_CLIENT) {
+                               m_MMGR_FREE_BUFR_LIST(
+                                   msg->info.peer_msg.info.client_msg.uba.ub);
+                       }
                        m_MMGR_FREE_MBCSV_EVT(msg);
                        TRACE_LEAVE2("ipc send failed");
                        return NCSCC_RC_FAILURE;
                }
        } else {
+               if (msg->info.peer_msg.type == MBCSV_EVT_INTERNAL_CLIENT) {
+                       m_MMGR_FREE_BUFR_LIST(
+                           msg->info.peer_msg.info.client_msg.uba.ub);
+               }
                m_MMGR_FREE_MBCSV_EVT(msg);
        }
 
diff --git a/src/mbc/mbcsv_pr_evts.c b/src/mbc/mbcsv_pr_evts.c
index 0deb5f25b..72dce61b5 100644
--- a/src/mbc/mbcsv_pr_evts.c
+++ b/src/mbc/mbcsv_pr_evts.c
@@ -147,7 +147,8 @@ uint32_t mbcsv_process_events(MBCSV_EVT *rcvd_evt, uint32_t 
mbcsv_hdl)
                        goto pr_done;
                }
        } break;
-       case MBCSV_EVT_INTERNAL: {
+       case MBCSV_EVT_INTERNAL:
+       case MBCSV_EVT_INTERNAL_RCV: {
                /*
                 * Process all the received events.
                 */
diff --git a/src/mbc/mbcsv_queue.c b/src/mbc/mbcsv_queue.c
index c0a41fce0..25ae13f5f 100644
--- a/src/mbc/mbcsv_queue.c
+++ b/src/mbc/mbcsv_queue.c
@@ -77,12 +77,17 @@ uint32_t mbcsv_client_queue_init(MBCSV_REG *mbc_reg)
 ******************************************************************************/
 bool mbcsv_client_cleanup_mbx(NCSCONTEXT arg, NCSCONTEXT msg)
 {
-       MBCSV_EVT *node = (MBCSV_EVT *)msg;
+       MBCSV_EVT *evt = (MBCSV_EVT *)msg;
        TRACE_ENTER();
 
-       /* deallocate the nodes */
-       if (NULL != node) {
-               m_MMGR_FREE_MBCSV_EVT(node);
+       /* deallocate the evt */
+       if (NULL != evt) {
+               if ((evt->msg_type == MBCSV_EVT_INTERNAL_RCV) &&
+                   (evt->info.peer_msg.type == MBCSV_EVT_INTERNAL_CLIENT)) {
+                       m_MMGR_FREE_BUFR_LIST(
+                           evt->info.peer_msg.info.client_msg.uba.ub);
+               }
+               m_MMGR_FREE_MBCSV_EVT(evt);
        }
        TRACE_LEAVE();
        return true;
diff --git a/src/mbc/mbcsv_util.c b/src/mbc/mbcsv_util.c
index 8ebc0733c..1288be2c7 100644
--- a/src/mbc/mbcsv_util.c
+++ b/src/mbc/mbcsv_util.c
@@ -484,6 +484,7 @@ uint32_t 
mbcsv_send_ckpt_data_to_all_peers(NCS_MBCSV_SEND_CKPT *msg_to_send,
                                return NCSCC_RC_FAILURE;
                        }
 
+                       uint32_t rc = NCSCC_RC_FAILURE;
                        if (parg.info.encode.i_peer_version ==
                            tmp_ptr->version) {
                                evt_msg.rcvr_peer_key.peer_inst_hdl =
@@ -495,23 +496,28 @@ uint32_t 
mbcsv_send_ckpt_data_to_all_peers(NCS_MBCSV_SEND_CKPT *msg_to_send,
 
                                switch (msg_to_send->i_send_type) {
                                case NCS_MBCSV_SND_SYNC: {
-                                       m_NCS_MBCSV_MDS_SYNC_SEND(
-                                           &evt_msg, tmp_ptr->my_ckpt_inst,
-                                           tmp_ptr->peer_anchor);
+                                       rc = m_NCS_MBCSV_MDS_SYNC_SEND(
+                                                   &evt_msg, 
tmp_ptr->my_ckpt_inst,
+                                                   tmp_ptr->peer_anchor);
                                } break;
 
                                case NCS_MBCSV_SND_USR_ASYNC:
                                case NCS_MBCSV_SND_MBC_ASYNC: {
-                                       m_NCS_MBCSV_MDS_ASYNC_SEND(
-                                           &evt_msg, tmp_ptr->my_ckpt_inst,
-                                           tmp_ptr->peer_anchor);
+                                       rc = m_NCS_MBCSV_MDS_ASYNC_SEND(
+                                                   &evt_msg, 
tmp_ptr->my_ckpt_inst,
+                                                   tmp_ptr->peer_anchor);
                                } break;
                                default:
+                                       m_MMGR_FREE_BUFR_LIST(dup_ub);
                                        TRACE_LEAVE2("unsupported send type");
                                        return NCSCC_RC_FAILURE;
                                }
                                tmp_ptr->ckpt_msg_sent = true;
                        }
+                       if ((rc != NCSCC_RC_SUCCESS) &&
+                           (rc != NCSCC_RC_REQ_TIMOUT)) {
+                               m_MMGR_FREE_BUFR_LIST(dup_ub);
+                       }
                        tmp_ptr = tmp_ptr->next;
                }
 
-- 
2.17.1



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

Reply via email to