]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Fix lock assertions in dshash.c.
authorThomas Munro <tmunro@postgresql.org>
Mon, 11 Jul 2022 02:47:16 +0000 (14:47 +1200)
committerThomas Munro <tmunro@postgresql.org>
Mon, 11 Jul 2022 03:48:54 +0000 (15:48 +1200)
commit7cdd0c2d7cdf08a4f8dfd8678a7b244c942e64e4
treeeba8f86f2f90e9ea5a058858c0b49a173bd4e81c
parente5b5b4448ce0981a7a89a8c43df77d71bfa9cc96
Fix lock assertions in dshash.c.

dshash.c previously maintained flags to be able to assert that you
didn't hold any partition lock.  These flags could get out of sync with
reality in error scenarios.

Get rid of all that, and make assertions about the locks themselves
instead.  Since LWLockHeldByMe() loops internally, we don't want to put
that inside another loop over all partition locks.  Introduce a new
debugging-only interface LWLockAnyHeldByMe() to avoid that.

This problem was noted by Tom and Andres while reviewing changes to
support the new shared memory stats system, and later showed up in
reality while working on commit 389869af.

Back-patch to 11, where dshash.c arrived.

Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Reported-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>
Reviewed-by: Zhihong Yu <zyu@yugabyte.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/20220311012712.botrpsikaufzteyt@alap3.anarazel.de
Discussion: https://postgr.es/m/CA%2BhUKGJ31Wce6HJ7xnVTKWjFUWQZPBngxfJVx4q0E98pDr3kAw%40mail.gmail.com
src/backend/lib/dshash.c
src/backend/storage/lmgr/lwlock.c
src/include/storage/lwlock.h