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

Reply via email to