I wrote: > Robert Haas <robertmh...@gmail.com> wrote: > >> If you could send a revised patch, that would be great. > > Attached. I put it in the same spot relative to the lock > acquisition that was used earlier in the function. And version 3 which might actually work. [sigh] -Kevin
*** a/src/backend/storage/lmgr/predicate.c --- b/src/backend/storage/lmgr/predicate.c *************** *** 3757,3762 **** CheckTargetForConflictsIn(PREDICATELOCKTARGETTAG *targettag) --- 3757,3773 ---- LWLockRelease(partitionLock); LWLockRelease(SerializablePredicateLockListLock); LWLockAcquire(partitionLock, LW_SHARED); + + /* + * The list may have been altered by another process + * while we weren't holding the partition lock. Start + * over at the front. + */ + nextpredlock = (PREDICATELOCK *) + SHMQueueNext(&(target->predicateLocks), + &(target->predicateLocks), + offsetof(PREDICATELOCK, targetLink)); + LWLockAcquire(SerializableXactHashLock, LW_SHARED); } } *************** *** 3770,3776 **** CheckTargetForConflictsIn(PREDICATELOCKTARGETTAG *targettag) LWLockRelease(SerializableXactHashLock); LWLockAcquire(SerializableXactHashLock, LW_EXCLUSIVE); ! FlagRWConflict(sxact, (SERIALIZABLEXACT *) MySerializableXact); LWLockRelease(SerializableXactHashLock); LWLockAcquire(SerializableXactHashLock, LW_SHARED); --- 3781,3799 ---- LWLockRelease(SerializableXactHashLock); LWLockAcquire(SerializableXactHashLock, LW_EXCLUSIVE); ! /* ! * Re-check after getting exclusive lock because the other ! * transaction may have flagged a conflict. ! */ ! if (!SxactIsRolledBack(sxact) ! && (!SxactIsCommitted(sxact) ! || TransactionIdPrecedes(GetTransactionSnapshot()->xmin, ! sxact->finishedBefore)) ! && !RWConflictExists(sxact, ! (SERIALIZABLEXACT *) MySerializableXact)) ! { ! FlagRWConflict(sxact, (SERIALIZABLEXACT *) MySerializableXact); ! } LWLockRelease(SerializableXactHashLock); LWLockAcquire(SerializableXactHashLock, LW_SHARED);
-- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs