mirror of
https://github.com/postgres/postgres.git
synced 2025-08-19 23:22:23 +03:00
Fix crash caused by log_timezone patch if we attempt to emit any elog messages
between the setting of log_line_prefix and the setting of log_timezone. We can't realistically set log_timezone any earlier than we do now, so the best behavior seems to be to use GMT zone if any timestamps are to be logged during early startup. Create a dummy zone variable with a minimal definition of GMT (in particular it will never know about leap seconds), so that we can set it up without reference to any external files.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
* 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/timezone/localtime.c,v 1.16 2006/10/18 16:43:14 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/timezone/localtime.c,v 1.17 2007/08/04 19:29:25 tgl Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -88,7 +88,6 @@ static void timesub(const pg_time_t *timep, long offset,
|
||||
const struct state * sp, struct pg_tm * tmp);
|
||||
static pg_time_t transtime(pg_time_t janfirst, int year,
|
||||
const struct rule * rulep, long offset);
|
||||
int tzparse(const char *name, struct state * sp, int lastditch);
|
||||
|
||||
/* GMT timezone */
|
||||
static struct state gmtmem;
|
||||
@@ -549,6 +548,12 @@ tzparse(const char *name, struct state * sp, int lastditch)
|
||||
if (stdlen >= sizeof sp->chars)
|
||||
stdlen = (sizeof sp->chars) - 1;
|
||||
stdoffset = 0;
|
||||
/*
|
||||
* Unlike the original zic library, do NOT invoke tzload() here;
|
||||
* we can't assume pg_open_tzfile() is sane yet, and we don't
|
||||
* care about leap seconds anyway.
|
||||
*/
|
||||
load_result = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -561,8 +566,8 @@ tzparse(const char *name, struct state * sp, int lastditch)
|
||||
name = getoffset(name, &stdoffset);
|
||||
if (name == NULL)
|
||||
return -1;
|
||||
load_result = tzload(TZDEFRULES, NULL, sp);
|
||||
}
|
||||
load_result = tzload(TZDEFRULES, NULL, sp);
|
||||
if (load_result != 0)
|
||||
sp->leapcnt = 0; /* so, we're off a little */
|
||||
if (*name != '\0')
|
||||
|
||||
Reference in New Issue
Block a user