DeadLockCheck... - Mailing list pgsql-hackers

From Vadim Mikheev
Subject DeadLockCheck...
Date
Msg-id 372AEC0C.2364206E@krs.ru
Whole thread Raw
List pgsql-hackers
session-1:
vac=> begin;
BEGIN
vac=> lock table t in row share mode;
LOCK TABLE

session-2:
vac=> begin;
BEGIN
vac=> lock table t in row share mode;
LOCK TABLE

session-3:
vac=> begin;
BEGIN
vac=> lock table t in row exclusive mode;
LOCK TABLE

session-1:
vac=> lock table t in share row exclusive mode;
--waiting (conflicts with session-3 lock)

session-2:
vac=> lock table t in share row exclusive mode;
NOTICE:  Deadlock detected -- See the lock(l) manual page for a possible cause.
ERROR:  WaitOnLock: error on wakeup - Aborting this transaction

???

ShareLockExclusive mode doesn't conflict with RowShare mode 
(though it is self-conflicting mode).

Comments in DeadLockCheck() say:    /*     * For findlock's wait queue, we are interested in     * procs who are
blockedwaiting for a write-lock on     * the table we are waiting on, and already hold a     * lock on it. We first
checkto see if there is an     * escalation deadlock, where we hold a readlock and     * want a writelock, and someone
elseholds readlock     * on the same table, and wants a writelock.     *     * Basically, the test is, "Do we both hold
somelock on     * findlock, and we are both waiting in the lock     * queue?"   bjm     */
 

Unfortunately, this is not right test any more -:(.

Vadim


pgsql-hackers by date:

Previous
From: Vadim Mikheev
Date:
Subject: locking...
Next
From: Vadim Mikheev
Date:
Subject: I'm planning some changes in lmgr...