summaryrefslogtreecommitdiff
path: root/src/backend/utils/misc
diff options
context:
space:
mode:
authorRobert Haas2014-01-21 14:41:40 +0000
committerRobert Haas2014-01-21 14:41:40 +0000
commita5bca4ef034f71175d46462963af2329d22068c2 (patch)
tree81cf0e3afc2e88d2ec9d1938842f483fca5583b2 /src/backend/utils/misc
parentd2458e3b20f744ef88a8d3afaab91caa17508370 (diff)
Plug more memory leaks when reloading config file.
Commit 138184adc5f7c60c184972e4d23f8cdb32aed77d plugged some but not all of the leaks from commit 2a0c81a12c7e6c5ac1557b0f1f4a581f23fd4ca7. This tightens things up some more. Amit Kapila, per an observation by Tom Lane
Diffstat (limited to 'src/backend/utils/misc')
-rw-r--r--src/backend/utils/misc/guc-file.l20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index ec9e0322021..a5b9d6ac77c 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -469,18 +469,22 @@ ParseConfigFile(const char *config_file, const char *calling_file, bool strict,
(errcode_for_file_access(),
errmsg("could not open configuration file \"%s\": %m",
abs_path)));
- return false;
+ OK = false;
+ goto cleanup;
}
ereport(LOG,
(errmsg("skipping missing configuration file \"%s\"",
abs_path)));
- return OK;
+ OK = true;
+ goto cleanup;
}
OK = ParseConfigFp(fp, abs_path, depth, elevel, head_p, tail_p);
- FreeFile(fp);
+cleanup:
+ if (fp)
+ FreeFile(fp);
pfree(abs_path);
return OK;
@@ -748,7 +752,8 @@ ParseConfigDirectory(const char *includedir,
(errcode_for_file_access(),
errmsg("could not open configuration directory \"%s\": %m",
directory)));
- return false;
+ status = false;
+ goto cleanup;
}
/*
@@ -803,7 +808,8 @@ ParseConfigDirectory(const char *includedir,
(errcode_for_file_access(),
errmsg("could not stat file \"%s\": %m",
filename)));
- return false;
+ status = false;
+ goto cleanup;
}
}
@@ -824,7 +830,9 @@ ParseConfigDirectory(const char *includedir,
status = true;
cleanup:
- FreeDir(d);
+ if (d)
+ FreeDir(d);
+ pfree(directory);
return status;
}