Fix memleak in ckpt API test.
---
 src/ckpt/apitest/ckpttest.c       | 11 ++++++++++-
 src/ckpt/apitest/test_cpa.c       | 33 ++++++++++++++++++++-----------
 src/ckpt/apitest/test_cpa_util.c  | 17 +++++++++++++---
 src/ckpt/apitest/test_cpsv.h      |  4 ++++
 src/ckpt/apitest/test_cpsv_conf.h |  3 ++-
 5 files changed, 51 insertions(+), 17 deletions(-)

diff --git a/src/ckpt/apitest/ckpttest.c b/src/ckpt/apitest/ckpttest.c
index 6463d2b0b..aeb4bfa83 100644
--- a/src/ckpt/apitest/ckpttest.c
+++ b/src/ckpt/apitest/ckpttest.c
@@ -20,14 +20,19 @@
 #include <unistd.h>
 #include <limits.h>
 #include <stdlib.h>
+#include "test_cpsv.h"
 #include "osaf/apitest/utest.h"
 #include "osaf/apitest/util.h"
 
 extern void fill_testcase_data(void);
 
+char *ckpt_valid_name;
+char *ckpt_invalid_name;
+
 int main(int argc, char **argv)
 {
        int suite = ALL_SUITES, tcase = ALL_TESTS;
+       int rc = 0;
 
        /* Initialize Test Data */
        fill_testcase_data();
@@ -45,5 +50,9 @@ int main(int argc, char **argv)
                return 0;
        }
 
-       return test_run(suite, tcase);
+       rc = test_run(suite, tcase);
+
+       free_testase_data();
+
+       return rc;
 }
diff --git a/src/ckpt/apitest/test_cpa.c b/src/ckpt/apitest/test_cpa.c
index 6c37e91d5..7457711d5 100644
--- a/src/ckpt/apitest/test_cpa.c
+++ b/src/ckpt/apitest/test_cpa.c
@@ -262,6 +262,14 @@ struct cpsv_testcase_data tcd = {.section3 = 
SA_CKPT_DEFAULT_SECTION_ID,
                                 .gen_sec = SA_CKPT_GENERATED_SECTION_ID,
                                 .section7 = SA_CKPT_GENERATED_SECTION_ID};
 
+void free_testase_data()
+{
+       if (ckpt_valid_name)
+               free(ckpt_valid_name);
+       if (ckpt_invalid_name)
+               free(ckpt_invalid_name);
+}
+
 void fill_testcase_data()
 {
        /* Variables for initialization */
@@ -355,24 +363,24 @@ void fill_testcase_data()
        fill_ckpt_name(&tcd.collocated_ckpt_large,
                       "safCkpt=collocated_large_ckpt,safApp=safCkptService");
 
-       char *ckpt_name = malloc(VALID_EXTENDED_NAME_LENGTH);
-       memset(ckpt_name, 0, VALID_EXTENDED_NAME_LENGTH);
-       memset(ckpt_name, '.', VALID_EXTENDED_NAME_LENGTH - 1);
+       ckpt_valid_name = malloc(VALID_EXTENDED_NAME_LENGTH);
+       memset(ckpt_valid_name, 0, VALID_EXTENDED_NAME_LENGTH);
+       memset(ckpt_valid_name, '.', VALID_EXTENDED_NAME_LENGTH - 1);
        int length = sprintf(
-           ckpt_name,
+           ckpt_valid_name,
            "safCkpt=all_replicas_ckpt_with_valid_extended_name_length");
-       *(ckpt_name + length) = '.';
-       saAisNameLend(ckpt_name,
+       *(ckpt_valid_name + length) = '.';
+       saAisNameLend(ckpt_valid_name,
                      &tcd.all_replicas_ckpt_with_valid_extended_name_length);
 
-       ckpt_name = malloc(INVALID_EXTENDED_NAME_LENGTH);
-       memset(ckpt_name, 0, INVALID_EXTENDED_NAME_LENGTH);
-       memset(ckpt_name, '.', INVALID_EXTENDED_NAME_LENGTH - 1);
+       ckpt_invalid_name = malloc(INVALID_EXTENDED_NAME_LENGTH);
+       memset(ckpt_invalid_name, 0, INVALID_EXTENDED_NAME_LENGTH);
+       memset(ckpt_invalid_name, '.', INVALID_EXTENDED_NAME_LENGTH - 1);
        length = sprintf(
-           ckpt_name,
+           ckpt_invalid_name,
            "safCkpt=all_replicas_ckpt_with_invalid_extended_name_length");
-       *(ckpt_name + length) = '.';
-       saAisNameLend(ckpt_name,
+       *(ckpt_invalid_name + length) = '.';
+       saAisNameLend(ckpt_invalid_name,
                      &tcd.all_replicas_ckpt_with_invalid_extended_name_length);
 
        /* Variables for sec create */
@@ -1045,6 +1053,7 @@ final3:
        test_ckpt_cleanup(CPSV_CLEAN_ASYNC_ALL_MODES_SUCCESS_T);
 final2:
        test_cpsv_cleanup(CPSV_CLEAN_INIT_SUCCESS_T);
+       cpsv_deletethread();
 final1:
        printResult(result);
        test_validate(result, TEST_PASS);
diff --git a/src/ckpt/apitest/test_cpa_util.c b/src/ckpt/apitest/test_cpa_util.c
index 474e76f0d..1bee31e85 100644
--- a/src/ckpt/apitest/test_cpa_util.c
+++ b/src/ckpt/apitest/test_cpa_util.c
@@ -24,6 +24,7 @@ extern const char *saf_error_string[];
 int gl_try_again_cnt;
 int gl_tmout_cnt;
 int gl_sync_pointnum;
+NCSCONTEXT gl_task_hdl;
 int tmoutFlag;
 
 int cpsv_test_result(SaAisErrorT rc, SaAisErrorT exp_out, char *test_case,
@@ -653,21 +654,26 @@ void selection_thread_blocking(NCSCONTEXT arg)
                m_TEST_CPSV_PRINTF("\n Thread selected \n");
 }
 
+void cpsv_deletethread(void)
+{
+       m_NCS_TASK_RELEASE(gl_task_hdl);
+}
+
 void cpsv_createthread(SaCkptHandleT *cl_hdl)
 {
        SaAisErrorT rc;
-       NCSCONTEXT thread_handle;
 
        rc = m_NCS_TASK_CREATE((NCS_OS_CB)selection_thread_blocking,
                               (NCSCONTEXT)cl_hdl, "cpsv_block_test", 0,
-                              SCHED_OTHER, 8000, &thread_handle);
+                              SCHED_OTHER, 8000, &gl_task_hdl);
        if (rc != NCSCC_RC_SUCCESS) {
                m_TEST_CPSV_PRINTF(" Failed to create thread\n");
                return;
        }
 
-       rc = m_NCS_TASK_START(thread_handle);
+       rc = m_NCS_TASK_START(gl_task_hdl);
        if (rc != NCSCC_RC_SUCCESS) {
+               m_NCS_TASK_RELEASE(gl_task_hdl);
                m_TEST_CPSV_PRINTF(" Failed to start thread\n");
                return;
        }
@@ -3007,6 +3013,11 @@ static void ntfCallback(SaNtfSubscriptionIdT 
subscriptionId,
                        break;
                }
        } while (false);
+
+       if (notification->notificationType == SA_NTF_TYPE_STATE_CHANGE)
+               saNtfNotificationFree(
+                   notification->notification.stateChangeNotification
+                       .notificationHandle);
 }
 
 int test_ckptNtfStateChange(int i, CONFIG_FLAG cfg_flg)
diff --git a/src/ckpt/apitest/test_cpsv.h b/src/ckpt/apitest/test_cpsv.h
index 2aee8cfe3..e82ad2cda 100644
--- a/src/ckpt/apitest/test_cpsv.h
+++ b/src/ckpt/apitest/test_cpsv.h
@@ -36,6 +36,9 @@
 #define TEST_UNINITIATED 6
 #define TEST_NORESULT 7
 
+extern char *ckpt_valid_name;
+extern char *ckpt_invalid_name;
+
 struct SafCkptInitialize {
   SaCkptHandleT *ckptHandle;
   SaVersionT *vers;
@@ -963,6 +966,7 @@ void AppCkptOpenCallback(SaInvocationT invocation,
                          SaAisErrorT error);
 void AppCkptSyncCallback(SaInvocationT invocation, SaAisErrorT error);
 void fill_testcase_data(void);
+void free_testase_data(void);
 void test_cpsv_get_inputs(TEST_CPSV_INST *inst);
 void test_initialize(void);
 void test_cpsv_fill_inputs(TEST_CPSV_INST *inst);
diff --git a/src/ckpt/apitest/test_cpsv_conf.h 
b/src/ckpt/apitest/test_cpsv_conf.h
index d33be6779..4af6d1e49 100644
--- a/src/ckpt/apitest/test_cpsv_conf.h
+++ b/src/ckpt/apitest/test_cpsv_conf.h
@@ -154,7 +154,7 @@ struct cpsv_testcase_data {
   int ntfTest;
 };
 
-struct cpsv_testcase_data tcd;
+extern struct cpsv_testcase_data tcd;
 
 extern int test_ckptInitialize(int i, CONFIG_FLAG cfg_flg);
 extern int test_ckptSelectionObject(int i, CONFIG_FLAG cfg_flg);
@@ -206,6 +206,7 @@ extern int test_red_ckptIterationNext(int i, CONFIG_FLAG 
cfg_flg);
 extern int test_red_ckptIterationFin(int i, CONFIG_FLAG cfg_flg);
 extern void selection_thread_blocking(NCSCONTEXT arg);
 extern void cpsv_createthread(SaCkptHandleT *cl_hdl);
+extern void cpsv_deletethread(void);
 
 extern void printHead(char *str);
 extern void cpsv_clean_clbk_params();
-- 
2.25.1



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to