Skip site navigation (1) Skip section navigation (2)

Soft deadlocks

From: Gregory Stark <stark(at)enterprisedb(dot)com>
To: PostgreSQL-development Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Soft deadlocks
Date: 2007-06-25 14:33:04
Message-ID: 87k5tsumsf.fsf@oxford.xeocode.com (view raw or flat)
Thread:
Lists: pgsql-hackers
I'm trying to understand what a soft deadlock is as described by deadlock.c.

As best I understand if a process, A, is waiting for a lock and is being
blocked only because someone, B, is ahead of it in the queue but hasn't been
granted the conflicting lock we want to jump A ahead of B.

So if i do something like:

process X:
---------
select * from x where i=1 for share;

----------------

process B:
---------
select * from x where i=1 for update;

----------------

process A:
---------
select * from x where i=1 for share;


process A will block, but when the deadlock timeout fires it should get jumped
ahead of process B.

If that's right then, uh, it doesn't seem to be working.

Process B:

postgres=# select * from x where i = 0 for update;
LOG:  process 4629 still waiting for ShareLock on transaction 7802 after 5000.149 ms

Process A:

postgres=# select * from x where i = 0 for share;
LOG:  process 4631 still waiting for ShareLock on tuple (0,1) of relation 16423 of database 11408 after 5000.151 ms

-- 
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com


Responses

pgsql-hackers by date

Next:From: Dave PageDate: 2007-06-25 14:33:56
Subject: Re: msvc and vista fun
Previous:From: Magnus HaganderDate: 2007-06-25 14:14:15
Subject: Re: msvc and vista fun

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group