# If we already hold a lock of a given strength, do not deadlock when # some other transaction is waiting for a conflicting lock and we try # to acquire the same lock we already held. setup { CREATE TABLE justthis ( value int ); INSERT INTO justthis VALUES (1); } teardown { DROP TABLE justthis; } session s1 setup { BEGIN; } step s1lock { SELECT * FROM justthis FOR SHARE; } step s1svpt { SAVEPOINT foo; } step s1lock2 { SELECT * FROM justthis FOR SHARE; } step s1c { COMMIT; } session s2 setup { BEGIN; } step s2lock { SELECT * FROM justthis FOR SHARE; } # ensure it's a multi step s2c { COMMIT; } session s3 setup { BEGIN; } step s3lock { SELECT * FROM justthis FOR UPDATE; } step s3c { COMMIT; } permutation s1lock s2lock s1svpt s3lock s1lock2 s2c s1c s3c