Browse Source

Fix resource allocation management during health reload (CID 367566) (#10813)

Stelios Fragkakis 4 years ago
parent
commit
ffb7f94544
1 changed files with 30 additions and 29 deletions
  1. 30 29
      libnetdata/libnetdata.c

+ 30 - 29
libnetdata/libnetdata.c

@@ -1406,45 +1406,46 @@ void recursive_config_double_dir_load(const char *user_path, const char *stock_p
     if (!dir) {
     if (!dir) {
         error("CONFIG cannot open stock config directory '%s'.", sdir);
         error("CONFIG cannot open stock config directory '%s'.", sdir);
     }
     }
-    else if (strcmp(udir, sdir)) {
-        struct dirent *de = NULL;
-        while((de = readdir(dir))) {
-            if(de->d_type == DT_DIR || de->d_type == DT_LNK) {
-                if( !de->d_name[0] ||
-                    (de->d_name[0] == '.' && de->d_name[1] == '\0') ||
-                    (de->d_name[0] == '.' && de->d_name[1] == '.' && de->d_name[2] == '\0')
+    else {
+        if (strcmp(udir, sdir)) {
+            struct dirent *de = NULL;
+            while((de = readdir(dir))) {
+                if(de->d_type == DT_DIR || de->d_type == DT_LNK) {
+                    if( !de->d_name[0] ||
+                        (de->d_name[0] == '.' && de->d_name[1] == '\0') ||
+                        (de->d_name[0] == '.' && de->d_name[1] == '.' && de->d_name[2] == '\0')
                         ) {
                         ) {
-                    debug(D_HEALTH, "CONFIG ignoring stock config directory '%s/%s'", sdir, de->d_name);
-                    continue;
-                }
+                        debug(D_HEALTH, "CONFIG ignoring stock config directory '%s/%s'", sdir, de->d_name);
+                        continue;
+                    }
 
 
-                if(path_is_dir(sdir, de->d_name)) {
-                    // we recurse in stock subdirectory, only when there is no corresponding
-                    // user subdirectory - to avoid reading the files twice
+                    if(path_is_dir(sdir, de->d_name)) {
+                        // we recurse in stock subdirectory, only when there is no corresponding
+                        // user subdirectory - to avoid reading the files twice
 
 
-                    if(!path_is_dir(udir, de->d_name))
-                        recursive_config_double_dir_load(udir, sdir, de->d_name, callback, data, depth + 1);
+                        if(!path_is_dir(udir, de->d_name))
+                            recursive_config_double_dir_load(udir, sdir, de->d_name, callback, data, depth + 1);
 
 
-                    continue;
+                        continue;
+                    }
                 }
                 }
-            }
 
 
-            if(de->d_type == DT_UNKNOWN || de->d_type == DT_REG || de->d_type == DT_LNK) {
-                size_t len = strlen(de->d_name);
-                if(path_is_file(sdir, de->d_name) && !path_is_file(udir, de->d_name) &&
-                   len > 5 && !strcmp(&de->d_name[len - 5], ".conf")) {
-                    char *filename = strdupz_path_subpath(sdir, de->d_name);
-                    debug(D_HEALTH, "CONFIG calling callback for stock file '%s'", filename);
-                    callback(filename, data);
-                    freez(filename);
-                    continue;
+                if(de->d_type == DT_UNKNOWN || de->d_type == DT_REG || de->d_type == DT_LNK) {
+                    size_t len = strlen(de->d_name);
+                    if(path_is_file(sdir, de->d_name) && !path_is_file(udir, de->d_name) &&
+                        len > 5 && !strcmp(&de->d_name[len - 5], ".conf")) {
+                        char *filename = strdupz_path_subpath(sdir, de->d_name);
+                        debug(D_HEALTH, "CONFIG calling callback for stock file '%s'", filename);
+                        callback(filename, data);
+                        freez(filename);
+                        continue;
+                    }
+
                 }
                 }
 
 
+                debug(D_HEALTH, "CONFIG ignoring stock-config file '%s/%s' of type %d", udir, de->d_name, (int)de->d_type);
             }
             }
-
-            debug(D_HEALTH, "CONFIG ignoring stock-config file '%s/%s' of type %d", udir, de->d_name, (int)de->d_type);
         }
         }
-
         closedir(dir);
         closedir(dir);
     }
     }