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