]> granicus.if.org Git - postgresql/commit
Avoid possible deadlock while locking multiple heap pages.
authorAmit Kapila <akapila@postgresql.org>
Sat, 2 Feb 2019 03:46:35 +0000 (09:16 +0530)
committerAmit Kapila <akapila@postgresql.org>
Sat, 2 Feb 2019 03:46:35 +0000 (09:16 +0530)
commit6a2c9c6331359c48e4fb883ff2513ef7da9bc581
treedfbb78942773aaec851b7788f0f795f2b5e5849a
parent90f1ba7ecf01f063c0e113c72afcf8c1a64ca285
Avoid possible deadlock while locking multiple heap pages.

To avoid deadlock, backend acquires a lock on heap pages in block
number order.  In certain cases, lock on heap pages is dropped and
reacquired.  In this case, the locks are dropped for reading in
corresponding VM page/s. The issue is we re-acquire locks in bufferId
order whereas the intention was to acquire in blockid order.

This commit ensures that we will always acquire locks on heap pages in
blockid order.

Reported-by: Nishant Fnu
Author: Nishant Fnu
Reviewed-by: Amit Kapila and Robert Haas
Backpatch-through: 9.4
Discussion: https://postgr.es/m/5883C831-2ED1-47C8-BFAC-2D5BAE5A8CAE@amazon.com
src/backend/access/heap/hio.c