|
24 | 24 | #include "common/controldata_utils.h"
|
25 | 25 | #include "funcapi.h"
|
26 | 26 | #include "miscadmin.h"
|
| 27 | +#include "storage/lwlock.h" |
27 | 28 | #include "utils/builtins.h"
|
28 | 29 | #include "utils/pg_lsn.h"
|
29 | 30 | #include "utils/timestamp.h"
|
@@ -54,7 +55,9 @@ pg_control_system(PG_FUNCTION_ARGS)
|
54 | 55 | tupdesc = BlessTupleDesc(tupdesc);
|
55 | 56 |
|
56 | 57 | /* read the control file */
|
| 58 | + LWLockAcquire(ControlFileLock, LW_SHARED); |
57 | 59 | ControlFile = get_controlfile(DataDir, &crc_ok);
|
| 60 | + LWLockRelease(ControlFileLock); |
58 | 61 | if (!crc_ok)
|
59 | 62 | ereport(ERROR,
|
60 | 63 | (errmsg("calculated CRC checksum does not match value stored in file")));
|
@@ -132,7 +135,9 @@ pg_control_checkpoint(PG_FUNCTION_ARGS)
|
132 | 135 | tupdesc = BlessTupleDesc(tupdesc);
|
133 | 136 |
|
134 | 137 | /* Read the control file. */
|
| 138 | + LWLockAcquire(ControlFileLock, LW_SHARED); |
135 | 139 | ControlFile = get_controlfile(DataDir, &crc_ok);
|
| 140 | + LWLockRelease(ControlFileLock); |
136 | 141 | if (!crc_ok)
|
137 | 142 | ereport(ERROR,
|
138 | 143 | (errmsg("calculated CRC checksum does not match value stored in file")));
|
@@ -236,7 +241,9 @@ pg_control_recovery(PG_FUNCTION_ARGS)
|
236 | 241 | tupdesc = BlessTupleDesc(tupdesc);
|
237 | 242 |
|
238 | 243 | /* read the control file */
|
| 244 | + LWLockAcquire(ControlFileLock, LW_SHARED); |
239 | 245 | ControlFile = get_controlfile(DataDir, &crc_ok);
|
| 246 | + LWLockRelease(ControlFileLock); |
240 | 247 | if (!crc_ok)
|
241 | 248 | ereport(ERROR,
|
242 | 249 | (errmsg("calculated CRC checksum does not match value stored in file")));
|
@@ -303,7 +310,9 @@ pg_control_init(PG_FUNCTION_ARGS)
|
303 | 310 | tupdesc = BlessTupleDesc(tupdesc);
|
304 | 311 |
|
305 | 312 | /* read the control file */
|
| 313 | + LWLockAcquire(ControlFileLock, LW_SHARED); |
306 | 314 | ControlFile = get_controlfile(DataDir, &crc_ok);
|
| 315 | + LWLockRelease(ControlFileLock); |
307 | 316 | if (!crc_ok)
|
308 | 317 | ereport(ERROR,
|
309 | 318 | (errmsg("calculated CRC checksum does not match value stored in file")));
|
|
0 commit comments