aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-10-04 16:47:48 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-10-04 16:47:48 -0400
commit4bcb82a7d590afa16507f9089bd68ef4bcebebb1 (patch)
tree01730ce89c6e2f4822212571ed7a47247b4406a2
parent9f5836d224e876399dfdd7d6d4343300dbc2f664 (diff)
downloadpostgresql-4bcb82a7d590afa16507f9089bd68ef4bcebebb1.tar.gz
postgresql-4bcb82a7d590afa16507f9089bd68ef4bcebebb1.zip
Add sourcefile/sourceline data to EXEC_BACKEND GUC transmission files.
This oversight meant that on Windows, the pg_settings view would not display source file or line number information for values coming from postgresql.conf, unless the backend had received a SIGHUP since starting. In passing, also make the error detection in read_nondefault_variables a tad more thorough, and fix it to not lose precision on float GUCs (these changes are already in HEAD as of my previous commit).
-rw-r--r--src/backend/utils/misc/guc.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 84702aa46ed..6aec7aa003a 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -7264,6 +7264,8 @@ _ShowOption(struct config_generic * record, bool use_units)
*
* variable name, string, null terminated
* variable value, string, null terminated
+ * variable sourcefile, string, null terminated (empty if none)
+ * variable sourceline, integer
* variable source, integer
* variable scontext, integer
*/
@@ -7325,6 +7327,11 @@ write_one_nondefault_variable(FILE *fp, struct config_generic * gconf)
fputc(0, fp);
+ if (gconf->sourcefile)
+ fprintf(fp, "%s", gconf->sourcefile);
+ fputc(0, fp);
+
+ fwrite(&gconf->sourceline, 1, sizeof(gconf->sourceline), fp);
fwrite(&gconf->source, 1, sizeof(gconf->source), fp);
fwrite(&gconf->scontext, 1, sizeof(gconf->scontext), fp);
}
@@ -7417,7 +7424,9 @@ read_nondefault_variables(void)
{
FILE *fp;
char *varname,
- *varvalue;
+ *varvalue,
+ *varsourcefile;
+ int varsourceline;
GucSource varsource;
GucContext varscontext;
@@ -7444,9 +7453,14 @@ read_nondefault_variables(void)
break;
if ((record = find_option(varname, true, FATAL)) == NULL)
- elog(FATAL, "failed to locate variable %s in exec config params file", varname);
+ elog(FATAL, "failed to locate variable \"%s\" in exec config params file", varname);
+
if ((varvalue = read_string_with_null(fp)) == NULL)
elog(FATAL, "invalid format of exec config params file");
+ if ((varsourcefile = read_string_with_null(fp)) == NULL)
+ elog(FATAL, "invalid format of exec config params file");
+ if (fread(&varsourceline, 1, sizeof(varsourceline), fp) != sizeof(varsourceline))
+ elog(FATAL, "invalid format of exec config params file");
if (fread(&varsource, 1, sizeof(varsource), fp) != sizeof(varsource))
elog(FATAL, "invalid format of exec config params file");
if (fread(&varscontext, 1, sizeof(varscontext), fp) != sizeof(varscontext))
@@ -7455,8 +7469,12 @@ read_nondefault_variables(void)
(void) set_config_option(varname, varvalue,
varscontext, varsource,
GUC_ACTION_SET, true);
+ if (varsourcefile[0])
+ set_config_sourcefile(varname, varsourcefile, varsourceline);
+
free(varname);
free(varvalue);
+ free(varsourcefile);
}
FreeFile(fp);