index 9f9d1e1bcbf9d5925ef0d61980345ac3d6ea75b8..a496489ebf3bdab1f11608bfd7a888fd22dfce2e 100644 (file)
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.390 2007年05月04日 01:13:44 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.391 2007年05月08日 16:33:51 petere Exp $
*
*--------------------------------------------------------------------
*/
@@ -2692,18 +2692,6 @@ add_guc_variable(struct config_generic * var, int elevel)
return true;
}
-static int
-guc_get_index(const char *name)
-{
- int i;
-
- for (i = 0; i < num_guc_variables; i++)
- if (guc_name_compare(name, guc_variables[i]->name) == 0)
- return i;
-
- return -1;
-}
-
/*
* Create and add a placeholder variable. It's presumed to belong
* to a valid custom variable class at this point.
@@ -2843,6 +2831,30 @@ guc_name_compare(const char *namea, const char *nameb)
}
+static int
+guc_get_index(const char *name)
+{
+ const char **key = &name;
+ struct config_generic **res;
+
+ Assert(name);
+
+ /*
+ * By equating const char ** with struct config_generic *, we are assuming
+ * the name field is first in config_generic.
+ */
+ res = (struct config_generic **) bsearch((void *) &key,
+ (void *) guc_variables,
+ num_guc_variables,
+ sizeof(struct config_generic *),
+ guc_var_compare);
+ if (!res)
+ return -1;
+
+ return res - guc_variables;
+}
+
+
/*
* Initialize GUC options during program startup.
*
@@ -4095,9 +4107,10 @@ set_config_option(const char *name, const char *value,
* we can't set the variable itself. There's one exception to
* this rule: if we want to apply the default value to variables
* that were removed from the configuration file. This is
- * indicated by source == PGC_S_DEFAULT.
+ * indicated by source == PGC_S_DEFAULT and context == PGC_SIGHUP.
*/
- if (record->source > source && source != PGC_S_DEFAULT)
+ if (record->source > source
+ && !(source == PGC_S_DEFAULT && context == PGC_SIGHUP))
{
if (changeVal && !makeDefault)
{