Ack. Thanks, Ramesh.
On 1/5/2016 2:52 PM, [email protected] wrote: > osaf/libs/core/mbcsv/include/mbcsv_pwe_anc.h | 9 ++++++ > osaf/libs/core/mbcsv/mbcsv_mds.c | 4 +- > osaf/libs/core/mbcsv/mbcsv_peer.c | 39 > ++++++++++++++++++++++++++++ > osaf/libs/core/mbcsv/mbcsv_pwe_anc.c | 9 ------ > 4 files changed, 50 insertions(+), 11 deletions(-) > > > When the mbcsv message peer info messages arrives faster than RED_UP messages, > then the problem described in the ticket will occur. > > Postpone/repost the peer messages if RED_UP event does not arrive. > > diff --git a/osaf/libs/core/mbcsv/include/mbcsv_pwe_anc.h > b/osaf/libs/core/mbcsv/include/mbcsv_pwe_anc.h > --- a/osaf/libs/core/mbcsv/include/mbcsv_pwe_anc.h > +++ b/osaf/libs/core/mbcsv/include/mbcsv_pwe_anc.h > @@ -38,6 +38,15 @@ > #include "mbcsv.h" > > /* > + * Peer list used for storing all the peers of this PWE. This is used > + * for brodcasting the message to all the peers. > + */ > +typedef struct { > + uint32_t pwe_hdl; /* Handle supplied by application > with OPEN call */ > + MBCSV_ANCHOR anchor; > +} MBCSV_PEER_KEY; > + > +/* > * Prototypes of PWE anchor. > */ > uint32_t mbcsv_destroy_peer_list(void); > diff --git a/osaf/libs/core/mbcsv/mbcsv_mds.c > b/osaf/libs/core/mbcsv/mbcsv_mds.c > --- a/osaf/libs/core/mbcsv/mbcsv_mds.c > +++ b/osaf/libs/core/mbcsv/mbcsv_mds.c > @@ -365,7 +365,7 @@ uint32_t mbcsv_mds_rcv(NCSMDS_CALLBACK_I > msg->msg_type = MBCSV_EVT_INTERNAL; > > if (msg->info.peer_msg.type == MBCSV_EVT_INTERNAL_PEER_DISC) { > - send_pri = NCS_IPC_PRIORITY_VERY_HIGH; > + send_pri = NCS_IPC_PRIORITY_HIGH; > } else > send_pri = NCS_IPC_PRIORITY_NORMAL; > > @@ -453,7 +453,7 @@ uint32_t mbcsv_mds_evt(MDS_CALLBACK_SVC_ > > evt->info.mds_sub_evt.evt_type = svc_info.i_change; > > - if (NCSCC_RC_SUCCESS != m_MBCSV_SND_MSG(&mbx, evt, > NCS_IPC_PRIORITY_HIGH)) { > + if (NCSCC_RC_SUCCESS != m_MBCSV_SND_MSG(&mbx, evt, > NCS_IPC_PRIORITY_VERY_HIGH)) { > m_MMGR_FREE_MBCSV_EVT(evt); > TRACE_LEAVE2("ipc send failed"); > return NCSCC_RC_FAILURE; > diff --git a/osaf/libs/core/mbcsv/mbcsv_peer.c > b/osaf/libs/core/mbcsv/mbcsv_peer.c > --- a/osaf/libs/core/mbcsv/mbcsv_peer.c > +++ b/osaf/libs/core/mbcsv/mbcsv_peer.c > @@ -650,6 +650,10 @@ void mbcsv_set_peer_state(CKPT_INST *ckp > uint32_t mbcsv_process_peer_up_info(MBCSV_EVT *msg, CKPT_INST *ckpt, > uint8_t peer_up) > { > PEER_INST *peer; > + MBCSV_PEER_KEY key; > + SYSF_MBX mbx; > + MBCSV_EVT *evt; > + > TRACE_ENTER(); > > /* > @@ -677,6 +681,41 @@ uint32_t mbcsv_process_peer_up_info(MBCS > } > } > > + if (0 != (mbx = mbcsv_get_mbx(msg->rcvr_peer_key.pwe_hdl, > msg->rcvr_peer_key.svc_id))) { > + > + memset(&key, '\0', sizeof(MBCSV_PEER_KEY)); > + key.pwe_hdl = msg->rcvr_peer_key.pwe_hdl; > + key.anchor = msg->rcvr_peer_key.peer_anchor; > + > + m_NCS_LOCK(&mbcsv_cb.peer_list_lock, NCS_LOCK_WRITE); > + > + if (NULL == ncs_patricia_tree_get(&mbcsv_cb.peer_list, (const > uint8_t *)&key)) { > + > + if (NULL == (evt = m_MMGR_ALLOC_MBCSV_EVT)) { > + TRACE_LEAVE2("malloc failed"); > + m_NCS_UNLOCK(&mbcsv_cb.peer_list_lock, > NCS_LOCK_WRITE); > + return NCSCC_RC_FAILURE; > + } > + > + memset(evt, '\0', sizeof(MBCSV_EVT)); > + memcpy(evt, msg, sizeof(MBCSV_EVT)); > + > + TRACE_4("Still RED_UP event not arrived of the peer"); > + > + /* Again post the event, till RED_UP event arrives */ > + if (NCSCC_RC_SUCCESS != m_MBCSV_SND_MSG(&mbx, evt, > NCS_IPC_PRIORITY_HIGH)) { > + TRACE_LEAVE2("ipc send failed"); > + m_NCS_UNLOCK(&mbcsv_cb.peer_list_lock, > NCS_LOCK_WRITE); > + return NCSCC_RC_FAILURE; > + } > + > + m_NCS_UNLOCK(&mbcsv_cb.peer_list_lock, NCS_LOCK_WRITE); > + return NCSCC_RC_SUCCESS; > + } > + > + m_NCS_UNLOCK(&mbcsv_cb.peer_list_lock, NCS_LOCK_WRITE); > + } > + > if (NULL == (peer = mbcsv_add_new_peer(ckpt, > msg->rcvr_peer_key.peer_anchor))) { > TRACE_LEAVE2("failed to add new peer"); > return NCSCC_RC_FAILURE; > diff --git a/osaf/libs/core/mbcsv/mbcsv_pwe_anc.c > b/osaf/libs/core/mbcsv/mbcsv_pwe_anc.c > --- a/osaf/libs/core/mbcsv/mbcsv_pwe_anc.c > +++ b/osaf/libs/core/mbcsv/mbcsv_pwe_anc.c > @@ -32,15 +32,6 @@ > */ > #include "mbcsv.h" > > -/* > - * Peer list used for storing all the peers of this PWE. This is used > - * for brodcasting the message to all the peers. > - */ > -typedef struct { > - uint32_t pwe_hdl; /* Handle supplied by application with > OPEN call */ > - MBCSV_ANCHOR anchor; > -} MBCSV_PEER_KEY; > - > typedef struct mbcsv_peer_list { > NCS_PATRICIA_NODE pat_node; > MBCSV_PEER_KEY key; ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
