pgsql: Fix busted logic for parallel lock grouping in TopoSort(). - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Fix busted logic for parallel lock grouping in TopoSort().
Date
Msg-id E1hsESI-0005BZ-4T@gemulon.postgresql.org
Whole thread Raw
List 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
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/3420851a2c2d2ac49b8ba53ccec5d02aa1e6a272

Modified Files
--------------
src/backend/storage/lmgr/deadlock.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)


pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: pgsql: Handle fsync failures in pg_receivewal and pg_recvlogical
Next
From: Michael Paquier
Date:
Subject: pgsql: Fix memory leak coming from simple lists built in reindexdb