pgsql: Fix thinko in lock mode enum
От | Alvaro Herrera |
---|---|
Тема | pgsql: Fix thinko in lock mode enum |
Дата | |
Msg-id | E1Y7qWw-0003nN-Vn@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix thinko in lock mode enum Commit 0e5680f4737a9c6aa94aa9e77543e5de60411322 contained a thinko mixing LOCKMODE with LockTupleMode. This caused misbehavior in the case where a tuple is marked with a multixact with at most a FOR SHARE lock, and another transaction tries to acquire a FOR NO KEY EXCLUSIVE lock; this case should block but doesn't. Include a new isolation tester spec file to explicitely try all the tuple lock combinations; without the fix it shows the problem: starting permutation: s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock3 s1_commit step s1_begin: BEGIN; step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; a 1 step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE; a 1 step s2_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE; a 1 step s1_commit: COMMIT; With the fixed code, step s2_tuplock3 blocks until session 1 commits, which is the correct behavior. All other cases behave correctly. Backpatch to 9.3, like the commit that introduced the problem. Branch ------ REL9_3_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/54a8abc2b7d150ae7e2738f4b0e687fd9cd9011a Modified Files -------------- src/backend/access/heap/heapam.c | 6 +- src/test/isolation/expected/tuplelock-conflict.out | 469 ++++++++++++++++++++ src/test/isolation/isolation_schedule | 1 + src/test/isolation/specs/tuplelock-conflict.spec | 63 +++ 4 files changed, 537 insertions(+), 2 deletions(-)
В списке pgsql-committers по дате отправления: