Skip to content

Commit b3ace28

Browse files
authored
Fix mem leak when cal working set (#176)
* Fix mem leak when cal working set * Apply clang-format
1 parent f7a63df commit b3ace28

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

libCacheSim/bin/cli_reader_utils.c

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ extern "C" {
1818
*
1919
* @param args
2020
*/
21-
trace_type_e trace_type_str_to_enum(const char *trace_type_str, const char *trace_path) {
21+
trace_type_e trace_type_str_to_enum(const char *trace_type_str,
22+
const char *trace_path) {
2223
if (strcasecmp(trace_type_str, "auto") == 0) {
2324
trace_type_e trace_type = detect_trace_type(trace_path);
2425
if (trace_type == UNKNOWN_TRACE) {
@@ -43,7 +44,8 @@ trace_type_e trace_type_str_to_enum(const char *trace_type_str, const char *trac
4344
return TWRNS_TRACE;
4445
} else if (strcasecmp(trace_type_str, "vscsi") == 0) {
4546
return VSCSI_TRACE;
46-
} else if (strcasecmp(trace_type_str, "oracleGeneralBin") == 0 || strcasecmp(trace_type_str, "oracleGeneral") == 0) {
47+
} else if (strcasecmp(trace_type_str, "oracleGeneralBin") == 0 ||
48+
strcasecmp(trace_type_str, "oracleGeneral") == 0) {
4749
return ORACLE_GENERAL_TRACE;
4850
} else if (strcasecmp(trace_type_str, "oracleSysTwrNS") == 0) {
4951
return ORACLE_SYS_TWRNS_TRACE;
@@ -56,11 +58,11 @@ trace_type_e trace_type_str_to_enum(const char *trace_type_str, const char *trac
5658
}
5759

5860
bool is_true(const char *arg) {
59-
if (strcasecmp(arg, "true") == 0 || strcasecmp(arg, "1") == 0 || strcasecmp(arg, "yes") == 0 ||
60-
strcasecmp(arg, "y") == 0) {
61+
if (strcasecmp(arg, "true") == 0 || strcasecmp(arg, "1") == 0 ||
62+
strcasecmp(arg, "yes") == 0 || strcasecmp(arg, "y") == 0) {
6163
return true;
62-
} else if (strcasecmp(arg, "false") == 0 || strcasecmp(arg, "0") == 0 || strcasecmp(arg, "no") == 0 ||
63-
strcasecmp(arg, "n") == 0) {
64+
} else if (strcasecmp(arg, "false") == 0 || strcasecmp(arg, "0") == 0 ||
65+
strcasecmp(arg, "no") == 0 || strcasecmp(arg, "n") == 0) {
6466
return false;
6567
} else {
6668
ERROR("Invalid value: %s, expect true/false", arg);
@@ -83,7 +85,8 @@ static void _check_parsed_result(char *end, int col_idx) {
8385
* @param reader_params_str
8486
* @param params
8587
*/
86-
void parse_reader_params(const char *reader_params_str, reader_init_param_t *params) {
88+
void parse_reader_params(const char *reader_params_str,
89+
reader_init_param_t *params) {
8790
params->delimiter = '\0';
8891
params->obj_id_is_num = false;
8992
params->obj_id_is_num_set = false;
@@ -112,7 +115,8 @@ void parse_reader_params(const char *reader_params_str, reader_init_param_t *par
112115
} else if (strcasecmp(key, "obj-id-col") == 0) {
113116
params->obj_id_field = (int)strtol(value, &end, 0);
114117
_check_parsed_result(end, params->obj_id_field);
115-
} else if (strcasecmp(key, "obj-size-col") == 0 || strcasecmp(key, "size-col") == 0) {
118+
} else if (strcasecmp(key, "obj-size-col") == 0 ||
119+
strcasecmp(key, "size-col") == 0) {
116120
params->obj_size_field = (int)strtol(value, &end, 0);
117121
_check_parsed_result(end, params->obj_size_field);
118122
} else if (strcasecmp(key, "cnt-col") == 0) {
@@ -143,7 +147,8 @@ void parse_reader_params(const char *reader_params_str, reader_init_param_t *par
143147
params->obj_id_is_num = is_true(value);
144148
} else if (strcasecmp(key, "block-size") == 0) {
145149
params->block_size = (int)(strtol(value, &end, 0));
146-
} else if (strcasecmp(key, "header") == 0 || strcasecmp(key, "has-header") == 0) {
150+
} else if (strcasecmp(key, "header") == 0 ||
151+
strcasecmp(key, "has-header") == 0) {
147152
params->has_header = is_true(value);
148153
params->has_header_set = true;
149154
} else if (strcasecmp(key, "format") == 0) {
@@ -233,7 +238,8 @@ bool should_disable_obj_metadata(reader_t *reader) {
233238
}
234239
#undef N_TEST
235240

236-
void cal_working_set_size(reader_t *reader, int64_t *wss_obj, int64_t *wss_byte) {
241+
void cal_working_set_size(reader_t *reader, int64_t *wss_obj,
242+
int64_t *wss_byte) {
237243
reset_reader(reader);
238244
request_t *req = new_request();
239245
GHashTable *obj_table = g_hash_table_new(g_direct_hash, g_direct_equal);
@@ -254,7 +260,8 @@ void cal_working_set_size(reader_t *reader, int64_t *wss_obj, int64_t *wss_byte)
254260
while (read_one_req(reader, req) == 0) {
255261
n_req += 1;
256262
if (n_req % 2000000 == 0) {
257-
DEBUG("processed %ld requests, %lld objects, %lld bytes\n", (long)n_req, (long long)*wss_obj, (long long)*wss_byte);
263+
DEBUG("processed %ld requests, %lld objects, %lld bytes\n", (long)n_req,
264+
(long long)*wss_obj, (long long)*wss_byte);
258265
}
259266
if (scaling_factor > 1 && req->obj_id % scaling_factor != 0) {
260267
continue;
@@ -273,12 +280,16 @@ void cal_working_set_size(reader_t *reader, int64_t *wss_obj, int64_t *wss_byte)
273280
*wss_byte *= scaling_factor;
274281

275282
if (scaling_factor > 1) {
276-
INFO("estimated working set size (%.2f sample ratio): %lld object %lld byte\n", 1.0 / scaling_factor, (long long)*wss_obj,
277-
(long long)*wss_byte);
283+
INFO(
284+
"estimated working set size (%.2f sample ratio): %lld object %lld "
285+
"byte\n",
286+
1.0 / scaling_factor, (long long)*wss_obj, (long long)*wss_byte);
278287
} else {
279-
INFO("working set size: %lld object %lld byte\n", (long long)*wss_obj, (long long)*wss_byte);
288+
INFO("working set size: %lld object %lld byte\n", (long long)*wss_obj,
289+
(long long)*wss_byte);
280290
}
281291

292+
g_hash_table_destroy(obj_table);
282293
free_request(req);
283294
reset_reader(reader);
284295
}
@@ -294,8 +305,9 @@ void cal_working_set_size(reader_t *reader, int64_t *wss_obj, int64_t *wss_byte)
294305
* @param sample_ratio
295306
* @return reader_t*
296307
*/
297-
reader_t *create_reader(const char *trace_type_str, const char *trace_path, const char *trace_type_params,
298-
const int64_t n_req, const bool ignore_obj_size, const int sample_ratio) {
308+
reader_t *create_reader(const char *trace_type_str, const char *trace_path,
309+
const char *trace_type_params, const int64_t n_req,
310+
const bool ignore_obj_size, const int sample_ratio) {
299311
/* convert trace type string to enum */
300312
trace_type_e trace_type = trace_type_str_to_enum(trace_type_str, trace_path);
301313

0 commit comments

Comments
 (0)