pgsql: Fix busted logic for parallel lock grouping in TopoSort().
От | Tom Lane |
---|---|
Тема | pgsql: Fix busted logic for parallel lock grouping in TopoSort(). |
Дата | |
Msg-id | E1hsESI-0005Bd-4x@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix busted logic for parallel lock grouping in TopoSort(). A "break" statement erroneously left behind by commit a1c1af2a1 caused TopoSort to do the wrong thing if a lock's wait list contained multiple members of the same locking group. Because parallel workers don't normally need any locks not already taken by their leader, this is very hard --- maybe impossible --- to hit in production. Still, if it did happen, the queries involved in an otherwise-resolvable deadlock would block until canceled. In addition to removing the bogus "break", add an Assert showing that the conflicting uses of the beforeConstraints[] array (for both counts and flags) don't overlap, and add some commentary explaining why not; because it's not obvious without explanation, IMHO. Original report and patch from Rui Hai Jiang; additional assert and commentary by me. Back-patch to 9.6 where the bug came in. Discussion: https://postgr.es/m/CAEri+mLd3bpHLyW+a9pSe1y=aEkeuJpwBSwvo-+m4n7-ceRmXw@mail.gmail.com Branch ------ REL_11_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/0dcb1c6c4874d2d464d426ded208b58b01e52174 Modified Files -------------- src/backend/storage/lmgr/deadlock.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
В списке pgsql-committers по дате отправления: