for (k : every txn slot)
TWFG_node[k] = { first_edge: -1, checked: true };
for (res : every LK_RES)
for ((blocked, blocking) : holder×holder,
waiter×holder, waiter×waiter pairs)
if (!compat (blocked_mode, their mode))
lock_add_WFG_edge (from, to, holder_flag);
for (k : every txn) walk current / ancestor;
reach a node already on my path → CYCLE
lock_select_deadlock_victim ();
lock_wakeup_deadlock_victim_* ();