diff options
| author | chenzizhan <[email protected]> | 2023-08-03 12:01:42 +0800 |
|---|---|---|
| committer | chenzizhan <[email protected]> | 2023-08-03 12:01:42 +0800 |
| commit | 672bc5eb97dfcc6d773f01f0774f3611591b4ad6 (patch) | |
| tree | 4272a1afb69a12ed5e87408e2d7a586da7ab503d | |
| parent | b2e4fb2929b57f5e05c183ebb256002da9121d61 (diff) | |
assert NULL
| -rw-r--r-- | build_and_run_all_test.sh | 8 | ||||
| -rw-r--r-- | src/fieldstat.c | 49 | ||||
| -rw-r--r-- | test/test_performance.cpp | 2 |
3 files changed, 54 insertions, 5 deletions
diff --git a/build_and_run_all_test.sh b/build_and_run_all_test.sh index 5751545..643d087 100644 --- a/build_and_run_all_test.sh +++ b/build_and_run_all_test.sh @@ -1,8 +1,8 @@ scriptfolder=`pwd` cd build rm -rf * -# cmake -DCMAKE_BUILD_TYPE=Release .. -cmake .. -DCOVERAGE=True +cmake -DCMAKE_BUILD_TYPE=Release .. +# cmake .. -DCOVERAGE=True make cd test for f in *test*; do @@ -11,7 +11,7 @@ for f in *test*; do # valgrind --tool=memcheck --leak-check=full ./$f wait done -lcov --capture --directory . --output-file AnyName.info -genhtml AnyName.info --output-directory CODE_COVERAGE +# lcov --capture --directory . --output-file AnyName.info +# genhtml AnyName.info --output-directory CODE_COVERAGE cd $scriptfolder diff --git a/src/fieldstat.c b/src/fieldstat.c index 1cf58a6..79c5294 100644 --- a/src/fieldstat.c +++ b/src/fieldstat.c @@ -59,6 +59,9 @@ struct fieldstat *fieldstat_new() void fieldstat_cube_free(struct fieldstat *instance, int cube_id); void fieldstat_free(struct fieldstat *instance) { + if (instance == NULL) { + return; + } for (size_t i = 0; i < instance->valid_cube_arr_length; i++) { fieldstat_cube_free(instance, i); } @@ -73,6 +76,9 @@ void fieldstat_free(struct fieldstat *instance) void fieldstat_reset(struct fieldstat *instance) { + if (instance == NULL) { + return; + } for (size_t i = 0; i < instance->valid_cube_arr_length; i++) { for (size_t j = 0; j < instance->cube[i]->n_metric; j++) { metric_reset(instance->cube[i]->metrics[j]); @@ -85,11 +91,19 @@ void fieldstat_reset(struct fieldstat *instance) unsigned long fieldstat_get_cell_version(const struct fieldstat *instance) { + if (instance == NULL) { + printf("ERR: instance is NULL\n"); + return 0; + } return instance->cell_version; } int fieldstat_unregister_cube(struct fieldstat *instance, int cube_id) { + if (instance == NULL) { + printf("ERR: instance is NULL\n"); + return -1; + } if (cube_id >= instance->valid_cube_arr_length) { printf("ERR: cube_id is out of range\n"); return -1; @@ -230,6 +244,10 @@ struct fs_cube *fieldstat_cube_new(const struct fieldstat_tag *shared_tags, size int fieldstat_register_cube(struct fieldstat *instance, const struct fieldstat_tag *shared_tags, size_t n_tag, enum sampling_mode mode, size_t max_n_cell) { + if (instance == NULL) { + printf("ERR: fieldstat instance is NULL\n"); + return -1; + } if (n_tag == 0 || shared_tags == NULL) { printf("ERR: shared tags must not be empty\n"); return -1; @@ -242,6 +260,10 @@ int fieldstat_register_cube(struct fieldstat *instance, const struct fieldstat_t int fieldstat_cube_add(struct fieldstat *instance, int cube_id, const struct fieldstat_tag *tags, size_t n_tag, long long increment) { + if (instance == NULL) { + printf("ERR: fieldstat instance is NULL\n"); + return -1; + } struct fs_cube *cube = instance->cube[cube_id]; if (cube == NULL) { printf("ERR: fieldstat_cube_add cube is not registered yet\n"); @@ -315,6 +337,10 @@ static int append_metric_to_cube(struct fs_cube *cube, struct metric *metric) int fieldstat_register_counter(struct fieldstat *instance, int cube_id, const char *field_name, bool is_gauge) { + if (instance == NULL) { + printf("ERR: fieldstat instance is NULL\n"); + return -1; + } struct fs_cube *cube = instance->cube[cube_id]; if (cube == NULL) { printf("ERR: fieldstat_register_counter cube is not registered yet\n"); @@ -327,6 +353,10 @@ int fieldstat_register_counter(struct fieldstat *instance, int cube_id, const ch int fieldstat_register_hll(struct fieldstat *instance, int cube_id, const char *field_name, unsigned char precision) { + if (instance == NULL) { + printf("ERR: fieldstat instance is NULL\n"); + return -1; + } struct fs_cube *cube = instance->cube[cube_id]; if (cube == NULL) { printf("ERR: fieldstat_register_hll cube is not registered yet\n"); @@ -343,6 +373,10 @@ int fieldstat_register_hll(struct fieldstat *instance, int cube_id, const char * int fieldstat_register_histogram(struct fieldstat *instance, int cube_id, const char *field_name, long long lowest_trackable_value, long long highest_trackable_value, int significant_figures) { + if (instance == NULL) { + printf("ERR: fieldstat instance is NULL\n"); + return -1; + } struct fs_cube *cube = instance->cube[cube_id]; if (cube == NULL) { printf("ERR: fieldstat_register_histogram cube is not registered yet\n"); @@ -386,6 +420,10 @@ static struct metric *fieldstat_find_metric(const struct fieldstat *instance, in #define FIELDSTAT_GENERAL_CHECK(instance, cube_id, metric_id, cell_id, metric_type) \ do { \ + if ((instance) == NULL) { \ + printf("ERR: [%s] fieldstat instance is NULL\n", __FUNCTION__); \ + return -1; \ + } \ if ((cube_id) < 0 || (cube_id) >= (instance)->valid_cube_arr_length) { \ printf("ERR: [%s] cube_id is not correct, input cube id: %d\n", __FUNCTION__, (cube_id)); \ return -1; \ @@ -478,6 +516,10 @@ int fieldstat_histogram_record(struct fieldstat *instance, int cube_id, int metr int fieldstat_serialize(const struct fieldstat *instance, char **blob_out, size_t *blob_size_out) { + if (instance == NULL) { + printf("ERR: fieldstat_serialize input is NULL\n"); + return -1; + } mpack_writer_t writer; mpack_writer_init_growable(&writer, blob_out, blob_size_out); mpack_build_map(&writer); @@ -699,6 +741,10 @@ void fieldstat_cube_merge(struct fs_cube *dest, const struct fs_cube *src) int fieldstat_merge(struct fieldstat *instance, struct fieldstat *src) { + if (instance == NULL || src == NULL) { + printf("ERR: fieldstat_merge: instance or src is NULL\n"); + return -1; + } size_t n_cube_dest = instance->valid_cube_arr_length; size_t n_cube_src = src->valid_cube_arr_length; // tag_cube_id_map use cube shared tag as key, find cubes. Is is not a cell manager. @@ -952,6 +998,9 @@ enum metric_type fieldstat_get_metric_type(const struct fieldstat *instance, int struct fieldstat *fieldstat_dup(const struct fieldstat *instance) { + if (instance == NULL) { + return NULL; + } struct fieldstat *new_instance = calloc(1, sizeof(struct fieldstat)); new_instance->valid_cube_arr_length = instance->valid_cube_arr_length; diff --git a/test/test_performance.cpp b/test/test_performance.cpp index 645d025..00bf379 100644 --- a/test/test_performance.cpp +++ b/test/test_performance.cpp @@ -143,7 +143,7 @@ TEST(test_performance, merge_performance_one_instance_comprehensive_histogram_em clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, true); printf("merge_performance_one_instance_comprehensive_histogram_empty_dest elapsed_secs: %ld\n", elapsed); - EXPECT_TRUE(elapsed < 2000); + EXPECT_TRUE(elapsed < 2500); } TEST(test_performance, merge_performance_one_instance_topk_counter_empty_dest) |
