From 138184adc5f7c60c184972e4d23f8cdb32aed77d Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Thu, 24 Oct 2013 15:21:50 +0300 Subject: [PATCH] Plug memory leak when reloading config file. The absolute path to config file was not pfreed. There are probably more small leaks here and there in the config file reload code and assign hooks, and in practice no-one reloads the config files frequently enough for it to be a problem, but this one is trivial enough that might as well fix it. Backpatch to 9.3 where the leak was introduced. --- src/backend/utils/misc/guc-file.l | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index b730a120d8..c5ca4a4074 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -409,6 +409,7 @@ ParseConfigFile(const char *config_file, const char *calling_file, bool strict, ConfigVariable **head_p, ConfigVariable **tail_p) { + char *abs_path; bool OK = true; FILE *fp; @@ -426,8 +427,8 @@ ParseConfigFile(const char *config_file, const char *calling_file, bool strict, return false; } - config_file = AbsoluteConfigLocation(config_file,calling_file); - fp = AllocateFile(config_file, "r"); + abs_path = AbsoluteConfigLocation(config_file, calling_file); + fp = AllocateFile(abs_path, "r"); if (!fp) { if (strict) @@ -435,19 +436,20 @@ ParseConfigFile(const char *config_file, const char *calling_file, bool strict, ereport(elevel, (errcode_for_file_access(), errmsg("could not open configuration file \"%s\": %m", - config_file))); + abs_path))); return false; } ereport(LOG, (errmsg("skipping missing configuration file \"%s\"", - config_file))); + abs_path))); return OK; } - OK = ParseConfigFp(fp, config_file, depth, elevel, head_p, tail_p); + OK = ParseConfigFp(fp, abs_path, depth, elevel, head_p, tail_p); FreeFile(fp); + pfree(abs_path); return OK; }