Fix resource allocation management during health reload (CID 367566) (#10813)
Stelios Fragkakis committed
Mar 22, 2021 at 15:58 UTC
ffb7f94544d7abe00fe1df0f03d8d319348eb567
1 file changed
+30
-29
libnetdata/libnetdata.c
+30
-29
@@ -1406,45 +1406,46 @@ void recursive_config_double_dir_load(const char *user_path, const char *stock_p
1406
if (!dir) {
1407
error("CONFIG cannot open stock config directory '%s'.", sdir);
1408
}
1409
- else if (strcmp(udir, sdir)) {
1410
- struct dirent *de = NULL;
1411
- while((de = readdir(dir))) {
1412
- if(de->d_type == DT_DIR || de->d_type == DT_LNK) {
1413
- if( !de->d_name[0] ||
1414
- (de->d_name[0] == '.' && de->d_name[1] == '\0') ||
1415
- (de->d_name[0] == '.' && de->d_name[1] == '.' && de->d_name[2] == '\0')
1409
+ else {
1410
+ if (strcmp(udir, sdir)) {
1411
+ struct dirent *de = NULL;
1412
+ while((de = readdir(dir))) {
1413
+ if(de->d_type == DT_DIR || de->d_type == DT_LNK) {
1414
+ if( !de->d_name[0] ||
1415
+ (de->d_name[0] == '.' && de->d_name[1] == '\0') ||
1416
+ (de->d_name[0] == '.' && de->d_name[1] == '.' && de->d_name[2] == '\0')
1417
) {
1417
- debug(D_HEALTH, "CONFIG ignoring stock config directory '%s/%s'", sdir, de->d_name);
1418
- continue;
1419
- }
1418
+ debug(D_HEALTH, "CONFIG ignoring stock config directory '%s/%s'", sdir, de->d_name);
1419
+ continue;
1420
+ }
1421
1421
- if(path_is_dir(sdir, de->d_name)) {
1422
- // we recurse in stock subdirectory, only when there is no corresponding
1423
- // user subdirectory - to avoid reading the files twice
1422
+ if(path_is_dir(sdir, de->d_name)) {
1423
+ // we recurse in stock subdirectory, only when there is no corresponding
1424
+ // user subdirectory - to avoid reading the files twice
1425
1425
- if(!path_is_dir(udir, de->d_name))
1426
- recursive_config_double_dir_load(udir, sdir, de->d_name, callback, data, depth + 1);
1426
+ if(!path_is_dir(udir, de->d_name))
1427
+ recursive_config_double_dir_load(udir, sdir, de->d_name, callback, data, depth + 1);
1428
1428
- continue;
1429
+ continue;
1430
+ }
1431
}
1430
- }
1432
1432
- if(de->d_type == DT_UNKNOWN || de->d_type == DT_REG || de->d_type == DT_LNK) {
1433
- size_t len = strlen(de->d_name);
1434
- if(path_is_file(sdir, de->d_name) && !path_is_file(udir, de->d_name) &&
1435
- len > 5 && !strcmp(&de->d_name[len - 5], ".conf")) {
1436
- char *filename = strdupz_path_subpath(sdir, de->d_name);
1437
- debug(D_HEALTH, "CONFIG calling callback for stock file '%s'", filename);
1438
- callback(filename, data);
1439
- freez(filename);
1440
- continue;
1433
+ if(de->d_type == DT_UNKNOWN || de->d_type == DT_REG || de->d_type == DT_LNK) {
1434
+ size_t len = strlen(de->d_name);
1435
+ if(path_is_file(sdir, de->d_name) && !path_is_file(udir, de->d_name) &&
1436
+ len > 5 && !strcmp(&de->d_name[len - 5], ".conf")) {
1437
+ char *filename = strdupz_path_subpath(sdir, de->d_name);
1438
+ debug(D_HEALTH, "CONFIG calling callback for stock file '%s'", filename);
1439
+ callback(filename, data);
1440
+ freez(filename);
1441
+ continue;
1442
+ }
1443
+
1444
}
1445
1446
+ debug(D_HEALTH, "CONFIG ignoring stock-config file '%s/%s' of type %d", udir, de->d_name, (int)de->d_type);
1447
}
1444
-
1445
- debug(D_HEALTH, "CONFIG ignoring stock-config file '%s/%s' of type %d", udir, de->d_name, (int)de->d_type);
1448
}
1447
-
1449
closedir(dir);
1450
}
1451