Heikki Linnakangas wrote: > Simon Riggs wrote: >> On Mon, 2010-01-25 at 09:52 +0200, Heikki Linnakangas wrote: >>> Would this simple scheme work: >>> >>> When the startup process has waited for a short while (ie >>> deadlock_timeout), it sends the signal "please check if you're holding a >>> pin on buffer X" to all backends. When a backend receives that signal, >>> it checks if it is holding a pin on the given buffer *and* waiting on a >>> lock. If it is, abort the transaction. Assuming that a backend can only >>> block waiting on a lock held by the startup process, deadlock detection >>> is as simple as that. >> No, it won't work. A deadlock could occur after the startup process has >> already been waiting for longer than the deadlock timeout. > > Retry every deadlock_timeout seconds?
Or better yet, also check if the current backend is holding the waited-for pin in CheckDeadLock(). -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers