---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel