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