*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.170 2009/01/01 17:23:51 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/init/miscinit.c,v 1.171 2009/01/03 20:03:08 tgl Exp $
*
*-------------------------------------------------------------------------
*/
char *shared_preload_libraries_string = NULL;
char *local_preload_libraries_string = NULL;
+/* Flag telling that we are loading shared_preload_libraries */
+bool process_shared_preload_libraries_in_progress = false;
+
/*
* load the shared libraries listed in 'libraries'
*
void
process_shared_preload_libraries(void)
{
+ process_shared_preload_libraries_in_progress = true;
load_libraries(shared_preload_libraries_string,
"shared_preload_libraries",
false);
+ process_shared_preload_libraries_in_progress = false;
}
/*
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.487 2009/01/02 10:33:20 mha Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.488 2009/01/03 20:03:08 tgl Exp $
*
*--------------------------------------------------------------------
*/
{
struct config_generic *gen;
+ /*
+ * Only allow custom PGC_POSTMASTER variables to be created during
+ * shared library preload; any later than that, we can't ensure that
+ * the value doesn't change after startup. This is a fatal elog if it
+ * happens; just erroring out isn't safe because we don't know what
+ * the calling loadable module might already have hooked into.
+ */
+ if (context == PGC_POSTMASTER &&
+ !process_shared_preload_libraries_in_progress)
+ elog(FATAL, "cannot create PGC_POSTMASTER variables after startup");
+
gen = (struct config_generic *) guc_malloc(ERROR, sz);
memset(gen, 0, sz);
case PGC_S_ENV_VAR:
case PGC_S_FILE:
case PGC_S_ARGV:
- phcontext = PGC_SIGHUP;
+ /*
+ * If we got past the check in init_custom_variable, we can
+ * safely assume that any existing value for a PGC_POSTMASTER
+ * variable was set in postmaster context.
+ */
+ if (variable->context == PGC_POSTMASTER)
+ phcontext = PGC_POSTMASTER;
+ else
+ phcontext = PGC_SIGHUP;
break;
case PGC_S_DATABASE:
case PGC_S_USER:
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.207 2009/01/01 17:23:55 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/miscadmin.h,v 1.208 2009/01/03 20:03:08 tgl Exp $
*
* NOTES
* some of the information in this file should be moved to other files.
/* in utils/init/miscinit.c */
extern bool IgnoreSystemIndexes;
+extern PGDLLIMPORT bool process_shared_preload_libraries_in_progress;
extern char *shared_preload_libraries_string;
extern char *local_preload_libraries_string;