@ -24,6 +24,7 @@
# include "common/controldata_utils.h"
# include "common/controldata_utils.h"
# include "funcapi.h"
# include "funcapi.h"
# include "miscadmin.h"
# include "miscadmin.h"
# include "storage/lwlock.h"
# include "utils/builtins.h"
# include "utils/builtins.h"
# include "utils/pg_lsn.h"
# include "utils/pg_lsn.h"
# include "utils/timestamp.h"
# include "utils/timestamp.h"
@ -42,7 +43,9 @@ pg_control_system(PG_FUNCTION_ARGS)
elog ( ERROR , " return type must be a row type " ) ;
elog ( ERROR , " return type must be a row type " ) ;
/* read the control file */
/* read the control file */
LWLockAcquire ( ControlFileLock , LW_SHARED ) ;
ControlFile = get_controlfile ( DataDir , & crc_ok ) ;
ControlFile = get_controlfile ( DataDir , & crc_ok ) ;
LWLockRelease ( ControlFileLock ) ;
if ( ! crc_ok )
if ( ! crc_ok )
ereport ( ERROR ,
ereport ( ERROR ,
( errmsg ( " calculated CRC checksum does not match value stored in file " ) ) ) ;
( errmsg ( " calculated CRC checksum does not match value stored in file " ) ) ) ;
@ -80,7 +83,9 @@ pg_control_checkpoint(PG_FUNCTION_ARGS)
elog ( ERROR , " return type must be a row type " ) ;
elog ( ERROR , " return type must be a row type " ) ;
/* Read the control file. */
/* Read the control file. */
LWLockAcquire ( ControlFileLock , LW_SHARED ) ;
ControlFile = get_controlfile ( DataDir , & crc_ok ) ;
ControlFile = get_controlfile ( DataDir , & crc_ok ) ;
LWLockRelease ( ControlFileLock ) ;
if ( ! crc_ok )
if ( ! crc_ok )
ereport ( ERROR ,
ereport ( ERROR ,
( errmsg ( " calculated CRC checksum does not match value stored in file " ) ) ) ;
( errmsg ( " calculated CRC checksum does not match value stored in file " ) ) ) ;
@ -169,7 +174,9 @@ pg_control_recovery(PG_FUNCTION_ARGS)
elog ( ERROR , " return type must be a row type " ) ;
elog ( ERROR , " return type must be a row type " ) ;
/* read the control file */
/* read the control file */
LWLockAcquire ( ControlFileLock , LW_SHARED ) ;
ControlFile = get_controlfile ( DataDir , & crc_ok ) ;
ControlFile = get_controlfile ( DataDir , & crc_ok ) ;
LWLockRelease ( ControlFileLock ) ;
if ( ! crc_ok )
if ( ! crc_ok )
ereport ( ERROR ,
ereport ( ERROR ,
( errmsg ( " calculated CRC checksum does not match value stored in file " ) ) ) ;
( errmsg ( " calculated CRC checksum does not match value stored in file " ) ) ) ;
@ -208,7 +215,9 @@ pg_control_init(PG_FUNCTION_ARGS)
elog ( ERROR , " return type must be a row type " ) ;
elog ( ERROR , " return type must be a row type " ) ;
/* read the control file */
/* read the control file */
LWLockAcquire ( ControlFileLock , LW_SHARED ) ;
ControlFile = get_controlfile ( DataDir , & crc_ok ) ;
ControlFile = get_controlfile ( DataDir , & crc_ok ) ;
LWLockRelease ( ControlFileLock ) ;
if ( ! crc_ok )
if ( ! crc_ok )
ereport ( ERROR ,
ereport ( ERROR ,
( errmsg ( " calculated CRC checksum does not match value stored in file " ) ) ) ;
( errmsg ( " calculated CRC checksum does not match value stored in file " ) ) ) ;