@@ -703,7 +703,7 @@ static void InitControlFile(uint64 sysidentifier, uint32 data_checksum_version);
703703static void WriteControlFile (void );
704704static void ReadControlFile (void );
705705static void UpdateControlFile (void );
706- static char * str_time (pg_time_t tnow );
706+ static char * str_time (pg_time_t tnow , char * buf , size_t bufsize );
707707
708708static int get_sync_bit (int method );
709709
@@ -5371,11 +5371,9 @@ BootStrapXLOG(uint32 data_checksum_version)
53715371}
53725372
53735373static char *
5374- str_time (pg_time_t tnow )
5374+ str_time (pg_time_t tnow , char * buf , size_t bufsize )
53755375{
5376- char * buf = palloc (128 );
5377-
5378- pg_strftime (buf , 128 ,
5376+ pg_strftime (buf , bufsize ,
53795377 "%Y-%m-%d %H:%M:%S %Z" ,
53805378 pg_localtime (& tnow , log_timezone ));
53815379
@@ -5618,6 +5616,7 @@ StartupXLOG(void)
56185616 XLogRecPtr missingContrecPtr ;
56195617 TransactionId oldestActiveXID ;
56205618 bool promoted = false;
5619+ char timebuf [128 ];
56215620
56225621 /*
56235622 * We should have an aux process resource owner to use, and we should not
@@ -5646,41 +5645,47 @@ StartupXLOG(void)
56465645 */
56475646 ereport (IsPostmasterEnvironment ? LOG : NOTICE ,
56485647 (errmsg ("database system was shut down at %s" ,
5649- str_time (ControlFile -> time ))));
5648+ str_time (ControlFile -> time ,
5649+ timebuf , sizeof (timebuf )))));
56505650 break ;
56515651
56525652 case DB_SHUTDOWNED_IN_RECOVERY :
56535653 ereport (LOG ,
56545654 (errmsg ("database system was shut down in recovery at %s" ,
5655- str_time (ControlFile -> time ))));
5655+ str_time (ControlFile -> time ,
5656+ timebuf , sizeof (timebuf )))));
56565657 break ;
56575658
56585659 case DB_SHUTDOWNING :
56595660 ereport (LOG ,
56605661 (errmsg ("database system shutdown was interrupted; last known up at %s" ,
5661- str_time (ControlFile -> time ))));
5662+ str_time (ControlFile -> time ,
5663+ timebuf , sizeof (timebuf )))));
56625664 break ;
56635665
56645666 case DB_IN_CRASH_RECOVERY :
56655667 ereport (LOG ,
56665668 (errmsg ("database system was interrupted while in recovery at %s" ,
5667- str_time (ControlFile -> time )),
5669+ str_time (ControlFile -> time ,
5670+ timebuf , sizeof (timebuf ))),
56685671 errhint ("This probably means that some data is corrupted and"
56695672 " you will have to use the last backup for recovery." )));
56705673 break ;
56715674
56725675 case DB_IN_ARCHIVE_RECOVERY :
56735676 ereport (LOG ,
56745677 (errmsg ("database system was interrupted while in recovery at log time %s" ,
5675- str_time (ControlFile -> checkPointCopy .time )),
5678+ str_time (ControlFile -> checkPointCopy .time ,
5679+ timebuf , sizeof (timebuf ))),
56765680 errhint ("If this has occurred more than once some data might be corrupted"
56775681 " and you might need to choose an earlier recovery target." )));
56785682 break ;
56795683
56805684 case DB_IN_PRODUCTION :
56815685 ereport (LOG ,
56825686 (errmsg ("database system was interrupted; last known up at %s" ,
5683- str_time (ControlFile -> time ))));
5687+ str_time (ControlFile -> time ,
5688+ timebuf , sizeof (timebuf )))));
56845689 break ;
56855690
56865691 default :
@@ -6325,6 +6330,12 @@ StartupXLOG(void)
63256330 */
63266331 CompleteCommitTsInitialization ();
63276332
6333+ /* Clean up EndOfWalRecoveryInfo data to appease Valgrind leak checking */
6334+ if (endOfRecoveryInfo -> lastPage )
6335+ pfree (endOfRecoveryInfo -> lastPage );
6336+ pfree (endOfRecoveryInfo -> recoveryStopReason );
6337+ pfree (endOfRecoveryInfo );
6338+
63286339 /*
63296340 * All done with end-of-recovery actions.
63306341 *
0 commit comments