diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2021-06-24 11:19:03 +0300 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2021-06-24 11:19:31 +0300 |
commit | 6fb377e5f74b09ac0b36034da65b179c567228b8 (patch) | |
tree | 27df07819e1029653c53ab3fbce7f65d45b82e87 | |
parent | 2a0ab13f8dd1346d03b00a737734aeca036514f9 (diff) | |
download | postgresql-6fb377e5f74b09ac0b36034da65b179c567228b8.tar.gz postgresql-6fb377e5f74b09ac0b36034da65b179c567228b8.zip |
Another fix to relmapper race condition.
In previous commit, I missed that relmap_redo() was also not acquiring the
RelationMappingLock. Thanks to Thomas Munro for pointing that out.
Backpatch-through: 9.6, like previous commit.
Discussion: https://www.postgresql.org/message-id/CA%2BhUKGLev%3DPpOSaL3WRZgOvgk217et%2BbxeJcRr4eR-NttP1F6Q%40mail.gmail.com
-rw-r--r-- | src/backend/utils/cache/relmapper.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/backend/utils/cache/relmapper.c b/src/backend/utils/cache/relmapper.c index 951e1802185..7bf74a9365a 100644 --- a/src/backend/utils/cache/relmapper.c +++ b/src/backend/utils/cache/relmapper.c @@ -1030,12 +1030,13 @@ relmap_redo(XLogReaderState *record) * preserve files, either. * * There shouldn't be anyone else updating relmaps during WAL replay, - * so we don't bother to take the RelationMappingLock. We would need - * to do so if load_relmap_file needed to interlock against writers. + * but grab the lock to interlock against load_relmap_file(). */ + LWLockAcquire(RelationMappingLock, LW_EXCLUSIVE); write_relmap_file((xlrec->dbid == InvalidOid), &newmap, false, true, false, xlrec->dbid, xlrec->tsid, dbpath); + LWLockRelease(RelationMappingLock); pfree(dbpath); } |