# Four-process deadlock with two hard edges and two soft edges. # d2 waits for e1 (soft edge), e1 waits for d1 (hard edge), # d1 waits for e2 (soft edge), e2 waits for d2 (hard edge). # The deadlock detector resolves the deadlock by reversing the d1-e2 edge, # unblocking d1. setup { CREATE TABLE a1 (); CREATE TABLE a2 (); } teardown { DROP TABLE a1, a2; } session "d1" setup { BEGIN; SET deadlock_timeout = '10s'; } step "d1a1" { LOCK TABLE a1 IN ACCESS SHARE MODE; } step "d1a2" { LOCK TABLE a2 IN ACCESS SHARE MODE; } step "d1c" { COMMIT; } session "d2" setup { BEGIN; SET deadlock_timeout = '10ms'; } step "d2a2" { LOCK TABLE a2 IN ACCESS SHARE MODE; } step "d2a1" { LOCK TABLE a1 IN ACCESS SHARE MODE; } step "d2c" { COMMIT; } session "e1" setup { BEGIN; SET deadlock_timeout = '10s'; } step "e1l" { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; } step "e1c" { COMMIT; } session "e2" setup { BEGIN; SET deadlock_timeout = '10s'; } step "e2l" { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; } step "e2c" { COMMIT; } permutation "d1a1" "d2a2" "e1l" "e2l" "d1a2" "d2a1" "d1c" "e1c" "d2c" "e2c"