@@ -703,7 +703,7 @@ static void InitControlFile(uint64 sysidentifier, uint32 data_checksum_version);
703
703
static void WriteControlFile (void );
704
704
static void ReadControlFile (void );
705
705
static 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 );
707
707
708
708
static int get_sync_bit (int method );
709
709
@@ -5381,11 +5381,9 @@ BootStrapXLOG(uint32 data_checksum_version)
5381
5381
}
5382
5382
5383
5383
static char *
5384
- str_time (pg_time_t tnow )
5384
+ str_time (pg_time_t tnow , char * buf , size_t bufsize )
5385
5385
{
5386
- char * buf = palloc (128 );
5387
-
5388
- pg_strftime (buf , 128 ,
5386
+ pg_strftime (buf , bufsize ,
5389
5387
"%Y-%m-%d %H:%M:%S %Z" ,
5390
5388
pg_localtime (& tnow , log_timezone ));
5391
5389
@@ -5628,6 +5626,7 @@ StartupXLOG(void)
5628
5626
XLogRecPtr missingContrecPtr ;
5629
5627
TransactionId oldestActiveXID ;
5630
5628
bool promoted = false;
5629
+ char timebuf [128 ];
5631
5630
5632
5631
/*
5633
5632
* We should have an aux process resource owner to use, and we should not
@@ -5656,41 +5655,47 @@ StartupXLOG(void)
5656
5655
*/
5657
5656
ereport (IsPostmasterEnvironment ? LOG : NOTICE ,
5658
5657
(errmsg ("database system was shut down at %s" ,
5659
- str_time (ControlFile -> time ))));
5658
+ str_time (ControlFile -> time ,
5659
+ timebuf , sizeof (timebuf )))));
5660
5660
break ;
5661
5661
5662
5662
case DB_SHUTDOWNED_IN_RECOVERY :
5663
5663
ereport (LOG ,
5664
5664
(errmsg ("database system was shut down in recovery at %s" ,
5665
- str_time (ControlFile -> time ))));
5665
+ str_time (ControlFile -> time ,
5666
+ timebuf , sizeof (timebuf )))));
5666
5667
break ;
5667
5668
5668
5669
case DB_SHUTDOWNING :
5669
5670
ereport (LOG ,
5670
5671
(errmsg ("database system shutdown was interrupted; last known up at %s" ,
5671
- str_time (ControlFile -> time ))));
5672
+ str_time (ControlFile -> time ,
5673
+ timebuf , sizeof (timebuf )))));
5672
5674
break ;
5673
5675
5674
5676
case DB_IN_CRASH_RECOVERY :
5675
5677
ereport (LOG ,
5676
5678
(errmsg ("database system was interrupted while in recovery at %s" ,
5677
- str_time (ControlFile -> time )),
5679
+ str_time (ControlFile -> time ,
5680
+ timebuf , sizeof (timebuf ))),
5678
5681
errhint ("This probably means that some data is corrupted and"
5679
5682
" you will have to use the last backup for recovery." )));
5680
5683
break ;
5681
5684
5682
5685
case DB_IN_ARCHIVE_RECOVERY :
5683
5686
ereport (LOG ,
5684
5687
(errmsg ("database system was interrupted while in recovery at log time %s" ,
5685
- str_time (ControlFile -> checkPointCopy .time )),
5688
+ str_time (ControlFile -> checkPointCopy .time ,
5689
+ timebuf , sizeof (timebuf ))),
5686
5690
errhint ("If this has occurred more than once some data might be corrupted"
5687
5691
" and you might need to choose an earlier recovery target." )));
5688
5692
break ;
5689
5693
5690
5694
case DB_IN_PRODUCTION :
5691
5695
ereport (LOG ,
5692
5696
(errmsg ("database system was interrupted; last known up at %s" ,
5693
- str_time (ControlFile -> time ))));
5697
+ str_time (ControlFile -> time ,
5698
+ timebuf , sizeof (timebuf )))));
5694
5699
break ;
5695
5700
5696
5701
default :
@@ -6336,6 +6341,12 @@ StartupXLOG(void)
6336
6341
*/
6337
6342
CompleteCommitTsInitialization ();
6338
6343
6344
+ /* Clean up EndOfWalRecoveryInfo data to appease Valgrind leak checking */
6345
+ if (endOfRecoveryInfo -> lastPage )
6346
+ pfree (endOfRecoveryInfo -> lastPage );
6347
+ pfree (endOfRecoveryInfo -> recoveryStopReason );
6348
+ pfree (endOfRecoveryInfo );
6349
+
6339
6350
/*
6340
6351
* All done with end-of-recovery actions.
6341
6352
*
0 commit comments