From: Heikki Linnakangas Date: Thu, 24 Jun 2021 08:19:03 +0000 (+0300) Subject: Another fix to relmapper race condition. X-Git-Tag: REL9_6_23~56 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=5956795cb5befdc7b5dab3e1e781b74fbc3590e8;p=postgresql.git 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 --- diff --git a/src/backend/utils/cache/relmapper.c b/src/backend/utils/cache/relmapper.c index b150118b280..346112aba32 100644 --- a/src/backend/utils/cache/relmapper.c +++ b/src/backend/utils/cache/relmapper.c @@ -941,12 +941,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); }