*** a/src/backend/utils/misc/guc-file.l --- b/src/backend/utils/misc/guc-file.l *************** *** 143,149 **** ProcessConfigFile(GucContext context) --- 143,155 ---- if (!ParseConfigFile(ConfigFileName, NULL, 0, context, elevel, &head, &tail)) + { + ereport(elevel, + (errcode(ERRCODE_CONFIG_FILE_ERROR), + errmsg("Did not reload \"%s\" due to earlier parsing error(s)", ConfigFileName))); + /* TODO: Report bogus variables in addition to parsing errors before bailing out */ goto cleanup_list; + } /* * We need the proposed new value of custom_variable_classes to check *************** *** 361,367 **** ParseConfigFile(const char *config_file, const char *calling_file, struct name_value_pair **head_p, struct name_value_pair **tail_p) { ! bool OK = true; char abs_path[MAXPGPATH]; FILE *fp; YY_BUFFER_STATE lex_buffer; --- 367,373 ---- struct name_value_pair **head_p, struct name_value_pair **tail_p) { ! bool ok = true; char abs_path[MAXPGPATH]; FILE *fp; YY_BUFFER_STATE lex_buffer; *************** *** 461,472 **** ParseConfigFile(const char *config_file, const char *calling_file, if (!ParseConfigFile(opt_value, config_file, depth + 1, context, elevel, head_p, tail_p)) ! { ! pfree(opt_name); ! pfree(opt_value); ! OK = false; ! goto cleanup_exit; ! } yy_switch_to_buffer(lex_buffer); ConfigFileLineno = save_ConfigFileLineno; pfree(opt_name); --- 467,474 ---- if (!ParseConfigFile(opt_value, config_file, depth + 1, context, elevel, head_p, tail_p)) ! ok = false; ! yy_switch_to_buffer(lex_buffer); ConfigFileLineno = save_ConfigFileLineno; pfree(opt_name); *************** *** 525,552 **** ParseConfigFile(const char *config_file, const char *calling_file, /* break out of loop if read EOF, else loop for next line */ if (token == 0) break; - } ! /* successful completion of parsing */ ! goto cleanup_exit; ! parse_error: ! if (token == GUC_EOL || token == 0) ! ereport(elevel, ! (errcode(ERRCODE_SYNTAX_ERROR), ! errmsg("syntax error in file \"%s\" line %u, near end of line", ! config_file, ConfigFileLineno - 1))); ! else ! ereport(elevel, ! (errcode(ERRCODE_SYNTAX_ERROR), ! errmsg("syntax error in file \"%s\" line %u, near token \"%s\"", ! config_file, ConfigFileLineno, yytext))); ! OK = false; ! cleanup_exit: yy_delete_buffer(lex_buffer); FreeFile(fp); ! return OK; } --- 527,555 ---- /* break out of loop if read EOF, else loop for next line */ if (token == 0) break; ! /* skip over parse_error if we made it this far without error */ ! continue; ! parse_error: ! if (token == GUC_EOL || token == 0) ! ereport(elevel, ! (errcode(ERRCODE_SYNTAX_ERROR), ! errmsg("syntax error in file \"%s\" line %u, near end of line", ! config_file, ConfigFileLineno - 1))); ! else ! ereport(elevel, ! (errcode(ERRCODE_SYNTAX_ERROR), ! errmsg("syntax error in file \"%s\" line %u, near token \"%s\"", ! config_file, ConfigFileLineno, yytext))); ! ok = false; ! } ! /* completion of parsing */ yy_delete_buffer(lex_buffer); FreeFile(fp); ! ! return ok; }