git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2bb1f14)
Code improvements for ALTER SYSTEM .. SET.
2014年1月13日 19:54:00 +0000 (14:54 -0500)
2014年1月13日 19:54:00 +0000 (14:54 -0500)
Move FreeConfigVariables() later to make sure ErrorConfFile is valid
when we use it, and get rid of an unnecessary string copy operation.

Amit Kapila, kibitzed by me.


diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index c452a0ac0dc938f1879a6a232bf4867582190de0..ec9e0322021b87fbeed9fa2c29eb1b0d3f3a76c1 100644 (file)
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -120,7 +120,6 @@ ProcessConfigFile(GucContext context)
*head,
*tail;
int i;
- char ConfigAutoFileName[MAXPGPATH];
char *ErrorConfFile;
char *CallingFileName;
@@ -155,17 +154,16 @@ ProcessConfigFile(GucContext context)
* data directory, however when called during initdb data directory is not
* set till this point, so use ConfigFile path which will be same.
*/
- snprintf(ConfigAutoFileName,sizeof(ConfigAutoFileName),"%s", PG_AUTOCONF_FILENAME);
if (data_directory)
CallingFileName = NULL;
else
CallingFileName = ConfigFileName;
- if (!ParseConfigFile(ConfigAutoFileName, CallingFileName, false, 0, elevel, &head, &tail))
+ if (!ParseConfigFile(PG_AUTOCONF_FILENAME, CallingFileName, false, 0, elevel, &head, &tail))
{
/* Syntax error(s) detected in the file, so bail out */
error = true;
- ErrorConfFile = ConfigAutoFileName;
+ ErrorConfFile = PG_AUTOCONF_FILENAME;
goto cleanup_list;
}
@@ -368,8 +366,6 @@ ProcessConfigFile(GucContext context)
PgReloadTime = GetCurrentTimestamp();
cleanup_list:
- FreeConfigVariables(head);
-
if (error)
{
/* During postmaster startup, any error is fatal */
@@ -389,6 +385,13 @@ ProcessConfigFile(GucContext context)
errmsg("configuration file \"%s\" contains errors; no changes were applied",
ErrorConfFile)));
}
+
+ /*
+ * Calling FreeConfigVariables() any earlier than this can cause problems,
+ * because ErrorConfFile could be pointing to a string that will be freed
+ * here.
+ */
+ FreeConfigVariables(head);
}
/*
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /