@cryptotaxi247 / netdata-1 / commits / ffb7f9454

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