pgsql: Fix deadlock between ginDeletePage() and ginStepRight()

Поиск
Список
Период
Сортировка
От Alexander Korotkov
Тема pgsql: Fix deadlock between ginDeletePage() and ginStepRight()
Дата
Msg-id E1iXAjx-0001cn-C1@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix deadlock between ginDeletePage() and ginStepRight()

When ginDeletePage() is about to delete page it locks its left sibling to revise
the rightlink.  So, it locks pages in right to left manner.  Int he same time
ginStepRight() locks pages in left to right manner, and that could cause a
deadlock.

This commit makes ginScanToDelete() keep exclusive lock on left siblings of
currently investigated path.  That elimites need to relock left sibling in
ginDeletePage().  Thus, deadlock with ginStepRight() can't happen anymore.

Reported-by: Chen Huajun
Discussion: https://postgr.es/m/5c332bd1.87b6.16d7c17aa98.Coremail.chjischj%40163.com
Author: Alexander Korotkov
Reviewed-by: Peter Geoghegan
Backpatch-through: 10

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/051c50c01c32ceb498d53e78f48297713744b7cb

Modified Files
--------------
src/backend/access/gin/README      | 79 ++++++++++++++++++++++----------------
src/backend/access/gin/ginvacuum.c | 54 +++++++++++++++++---------
2 files changed, 81 insertions(+), 52 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Alexander Korotkov
Дата:
Сообщение: pgsql: Fix deadlock between ginDeletePage() and ginStepRight()
Следующее
От: Alexander Korotkov
Дата:
Сообщение: pgsql: Fix deadlock between ginDeletePage() and ginStepRight()