--- 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