From 4bcb82a7d590afa16507f9089bd68ef4bcebebb1 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 4 Oct 2011 16:47:48 -0400 Subject: [PATCH] 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). --- src/backend/utils/misc/guc.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 84702aa46e..6aec7aa003 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); -- 2.40.0