diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index f595bce31b..84ff4e8c67 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -1871,17 +1871,20 @@ RemoveFromWaitQueue(PGPROC *proc, uint32 hashcode) LOCK *waitLock = proc->waitLock; PROCLOCK *proclock = proc->waitProcLock; LOCKMODE lockmode = proc->waitLockMode; - LOCKMETHODID lockmethodid = LOCK_LOCKMETHOD(*waitLock); + LOCKMETHODID lockmethodid; /* Make sure proc is waiting */ Assert(proc->waitStatus == PROC_WAIT_STATUS_WAITING); Assert(proc->links.next != NULL); Assert(waitLock); Assert(!dclist_is_empty(&waitLock->waitProcs)); + + /* Make sure proc is waiting with a valid lock method */ + lockmethodid = LOCK_LOCKMETHOD(*waitLock); Assert(0 < lockmethodid && lockmethodid < lengthof(LockMethods)); /* Remove proc from lock's wait queue */ - dclist_delete_from(&waitLock->waitProcs, &proc->links); + dclist_delete_from_thoroughly(&waitLock->waitProcs, &proc->links); /* Undo increments of request counts by waiting process */ Assert(waitLock->nRequested > 0);