Avoid calling select_default_timezone() when backing out an unwanted TZ

setting.  This is a temporary kluge to keep Alvaro happy; eventually we
should fix the TZ library API to make the problem really go away.
This commit is contained in:
Tom Lane 2004-05-23 23:12:11 +00:00
parent f9df1b28e8
commit 9e0fcc2ad5
1 changed files with 32 additions and 5 deletions

View File

@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/variable.c,v 1.95 2004/05/21 05:07:57 tgl Exp $
* $PostgreSQL: pgsql/src/backend/commands/variable.c,v 1.96 2004/05/23 23:12:11 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -329,9 +329,13 @@ assign_timezone(const char *value, bool doit, GucSource source)
* Otherwise assume it is a timezone name.
*
* We have to actually apply the change before we can have any
* hope of checking it. So, save the old value in case we
* have to back out. We have to copy since pg_get_current_timezone
* hope of checking it. So, save the old value in case we have
* to back out. We have to copy since pg_get_current_timezone
* returns a pointer to its static state.
*
* This would all get a lot simpler if the TZ library had a better
* API that would let us look up and test a timezone name without
* making it the default.
*/
const char *cur_tz;
char *save_tz;
@ -361,8 +365,31 @@ assign_timezone(const char *value, bool doit, GucSource source)
*/
if (save_tz)
pg_tzset(save_tz);
else /* TZ library not initialized yet */
select_default_timezone();
else
{
/*
* TZ library wasn't initialized yet. Annoyingly, we will
* come here during startup because guc-file.l checks
* the value with doit = false before actually applying.
* The best approach seems to be as follows:
*
* 1. known && acceptable: leave the setting in place,
* since we'll apply it soon anyway. This is mainly
* so that any log messages printed during this interval
* are timestamped with the user's requested timezone.
*
* 2. known && !acceptable: revert to GMT for lack of
* any better idea. (select_default_timezone() may get
* called later to undo this.)
*
* 3. !known: no need to do anything since TZ library
* did not change its state.
*
* Again, this should all go away sometime soon.
*/
if (known && !acceptable)
pg_tzset("GMT");
}
/* Complain if it was bad */
if (!known)
{