Fix memleak in ckpt API test.
---
src/ckpt/apitest/ckpttest.c | 12 ++++++++++-
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, 52 insertions(+), 17 deletions(-)
diff --git a/src/ckpt/apitest/ckpttest.c b/src/ckpt/apitest/ckpttest.c
index 6463d2b0b..aa6ab8083 100644
--- a/src/ckpt/apitest/ckpttest.c
+++ b/src/ckpt/apitest/ckpttest.c
@@ -20,14 +20,20 @@
#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);
+extern void free_testase_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 +51,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..e4ecdd4b5 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 */
@@ -1046,6 +1054,7 @@ final3:
final2:
test_cpsv_cleanup(CPSV_CLEAN_INIT_SUCCESS_T);
final1:
+ cpsv_deletethread();
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..34d8bf987 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()
+{
+ 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..986794f4c 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();
extern void printHead(char *str);
extern void cpsv_clean_clbk_params();
--
2.25.1
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel