DeadLockCheck...
От | Vadim Mikheev |
---|---|
Тема | DeadLockCheck... |
Дата | |
Msg-id | 372AEC0C.2364206E@krs.ru обсуждение исходный текст |
Список | 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 по дате отправления: