I'll add the free(msg) before pushing/Thanks HansN

On 11/14/2017 10:06 PM, Anders Widell wrote:
When I compare this with the fix that I did as part of ticket [#2451] (pasted in below), I think it looks like you forgot free(ms), and thus you get a memory leak eachh time you receive an CLMSV_CLMS_TO_CLMNA_REBOOT_MSG, CLMSV_CLMS_TO_CLMNA_NODE_REBOOT_MSG or CLMSV_CLMS_TO_CLMNA_ACTION_MSG message? Also, maybe you should consider using a switch statement like I did? Ack for the patch if you at least fix the memory leak.

You find my patch below (though cluster_generation_id is of course not applicable without the rest of the code in ticket [#2451].

@@ -175,15 +247,40 @@ static uint32_t clmna_mds_dec_flat(struct ncsmds_callback_info *info)
 static uint32_t clmna_mds_rcv(struct ncsmds_callback_info *mds_cb_info)
 {
     CLMSV_MSG *msg = (CLMSV_MSG *)mds_cb_info->info.receive.i_msg;
-    CLMNA_EVT *evt = calloc(1, sizeof(CLMNA_EVT));
-    evt->type = CLMNA_EVT_JOIN_RESPONSE;
-    evt->join_response.rc = msg->info.api_resp_info.rc;
-    evt->join_response.node_name = msg->info.api_resp_info.param.node_name;
-    free(msg);
-    if (m_NCS_IPC_SEND(&clmna_cb->mbx, evt, NCS_IPC_PRIORITY_VERY_HIGH) !=
-        NCSCC_RC_SUCCESS) {
-        LOG_ER("IPC send to mailbox failed: %s", __FUNCTION__);
+
+    switch (msg->evt_type) {
+    case CLMSV_CLMS_TO_CLMNA_REBOOT_MSG:
+        break;
+    case CLMSV_CLMS_TO_CLMA_API_RESP_MSG: {
+        CLMNA_EVT *evt = calloc(1, sizeof(CLMNA_EVT));
+
+        if (msg->info.api_resp_info.type == CLMSV_CLUSTER_JOIN_RESP) {
+            evt->type = CLMNA_EVT_JOIN_RESPONSE;
+            evt->join_response.rc = msg->info.api_resp_info.rc;
+            evt->join_response.node_name =
+                msg->info.api_resp_info.param.join_response
+                .node_name;
+            evt->join_response.cluster_generation_id =
+                msg->info.api_resp_info.param.join_response
+                .cluster_generation_id;
+            TRACE("join_response.cluster_generation_id = %" PRIu64,
+                  evt->join_response.cluster_generation_id);
+            if (m_NCS_IPC_SEND(&clmna_cb->mbx, evt,
+                       NCS_IPC_PRIORITY_VERY_HIGH) !=
+                NCSCC_RC_SUCCESS) {
+                LOG_ER("IPC send to mailbox failed: %s",
+                       __FUNCTION__);
+            }
+        } else {
+            LOG_ER("Unknown API response type %d",
+                   msg->info.api_resp_info.type);
+        }
+    } break;
+    default:
+        LOG_ER("Unknown event type %d", msg->evt_type);
+        break;
     }
+    free(msg);
     return NCSCC_RC_SUCCESS;
 }


On 11/01/2017 04:23 PM, Hans Nordeback wrote:
---
  src/clm/clmnd/main.c | 7 +++++++
  1 file changed, 7 insertions(+)

diff --git a/src/clm/clmnd/main.c b/src/clm/clmnd/main.c
index 926c5b718..948703426 100644
--- a/src/clm/clmnd/main.c
+++ b/src/clm/clmnd/main.c
@@ -215,6 +215,13 @@ static uint32_t clmna_mds_dec_flat(struct ncsmds_callback_info *info)   static uint32_t clmna_mds_rcv(struct ncsmds_callback_info *mds_cb_info)
  {
      CLMSV_MSG *msg = (CLMSV_MSG *)mds_cb_info->info.receive.i_msg;
+
+    if (msg->evt_type == CLMSV_CLMS_TO_CLMNA_REBOOT_MSG ||
+        msg->evt_type == CLMSV_CLMS_TO_CLMNA_NODE_REBOOT_MSG ||
+        msg->evt_type == CLMSV_CLMS_TO_CLMNA_ACTION_MSG) {
+        return NCSCC_RC_SUCCESS;
+    }
+
      CLMNA_EVT *evt = calloc(1, sizeof(CLMNA_EVT));
      evt->type = CLMNA_EVT_JOIN_RESPONSE;
      evt->join_response.rc = msg->info.api_resp_info.rc;



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

Reply via email to