Hi Thuan,

Ack from me.

Just a suggestion for more correct comment (in case there's only one handle matching the callback label):

/* Descrease the cbk count */ => /* Remove the agent hdl from the cbk_list */

Thanks,
Nguyen

On 7/13/2018 10:52 AM, thuan.tran wrote:
Sometimes, callback agent dispatch and fail at saSmfReponse()
because cbk list is empty, agent by somehow handle evt before increase
cbk count. To avoid this, increase cbk count before post the evt.
---
  src/smf/agent/smfa_utils.c | 40 +++++++++++++++++++++-----------------
  1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/src/smf/agent/smfa_utils.c b/src/smf/agent/smfa_utils.c
index fb31a9ae1..3436785cd 100644
--- a/src/smf/agent/smfa_utils.c
+++ b/src/smf/agent/smfa_utils.c
@@ -615,8 +615,8 @@ SMFA_CBK_HDL_LIST *smfa_inv_hdl_add(SaInvocationT inv_id, 
SaSmfHandleT hdl)
  }
/***************************************************************************
-@brief         : Match the filter. If matches, post the evt to the client MBX
-                 and increment the cbk count of the the corresponding hdl node.
+@brief         : Match the filter. If matches, increment the cbk count of
+                 the corresponding hdl node and post the evt to the client MBX.
                  If for a client, more than one scope matches, then those many
                  no of evts are posted to the MBX.
  @param[in]    : client_info - For which filter match to be performed.
@@ -694,27 +694,31 @@ uint32_t smfa_cbk_filter_match(SMFA_CLIENT_INFO 
*client_info,
                                        &cbk_evt->object_name),
                                    &evt->evt.cbk_evt.object_name);
- if (m_NCS_IPC_SEND(&client_info->cbk_mbx,
-                                                  (NCSCONTEXT)evt,
-                                                  NCS_IPC_PRIORITY_NORMAL)) {
-                                       /* Increment the cbk count.*/
-                                       if (NULL != hdl_list) {
-                                               /* There are two scope id
-                                                * matching for the same hdl.*/
-                                       } else {
-                                               /* First scope id matching for
-                                                * this hdl.*/
-                                               hdl_list = smfa_inv_hdl_add(
-                                                   cbk_evt->inv_id,
-                                                   client_info->client_hdl);
-                                       }
-                                       hdl_list->cnt++;
-                                       rc = NCSCC_RC_SUCCESS;
+                               /* Increment the cbk count.*/
+                               if (NULL != hdl_list) {
+                                       /* There are two scope id
+                                        * matching for the same hdl.*/
                                } else {
+                                       /* First scope id matching for
+                                        * this hdl.*/
+                                       hdl_list = smfa_inv_hdl_add(
+                                           cbk_evt->inv_id,
+                                           client_info->client_hdl);
+                               }
+                               hdl_list->cnt++;
+                               rc = m_NCS_IPC_SEND(
+                                       &client_info->cbk_mbx,
+                                       (NCSCONTEXT)evt,
+                                       NCS_IPC_PRIORITY_NORMAL);
+                               if (rc != NCSCC_RC_SUCCESS) {
                                        LOG_ER(
                                            "SMFA: Posting to MBX failed. hdl: %llu, 
scoe_id: %u",
                                            client_info->client_hdl,
                                            cbk_evt->scope_id);
+                                       /* Descrease the cbk count */
+                                       smfa_cbk_ok_resp_process(
+                                               client_info->client_hdl,
+                                               cbk_evt->inv_id);
                                }
/* If one of the filter matches then go to the


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to