agora inbox for pgsql-committers@postgresql.org  
help / color / mirror / Atom feed
From: Michael Paquier <michael@paquier.xyz>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: injection_points: Clear waiter slot on error and exit
Date: Thu, 23 Jul 2026 05:38:12 +0000
Message-ID: <E1wmm8K-00000000Ob1-14U0@gemulon.postgresql.org> (raw)

injection_points: Clear waiter slot on error and exit

injection_wait() only clears its slot in the waiter array after the
wait loop finishes.  When the waiting query is canceled or the backend
is terminated (wait look has a CHECK_FOR_INTERRUPS), the slot leaks.
Later wakeups of the same point then bump the counter of the leaked slot
instead of the real waiter, that sleeps forever.  Repeated leaks can
exhaust all the slots.

The code is changed so as the waiting loop is wrapped with
PG_ENSURE_ERROR_CLEANUP, so as the injection point slots, that are
shared resources, can be cleaned up on ERROR as much as a FATAL.

An isolation test is added: cancel one waiter, terminate another waiter,
then check that a later waiter still receives a wakeup.  Without the
fixed code, the test would fail on timeout.

Author: Zsolt Parragi <zsolt.parragi@percona.com>
Discussion: https://postgr.es/m/CAN4CZFO+KF=cc0-iEg28RhqRBp_fTs6D4b8b7D7DB-pGYP3Ccg@mail.gmail.com
Backpatch-through: 17

Branch
------
REL_18_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/bb0a3ca8d218b6c0792235d7306117e5bc36294a

Modified Files
--------------
src/test/modules/injection_points/Makefile         |  1 +
.../injection_points/expected/wait_cleanup.out     | 87 ++++++++++++++++++++++
.../modules/injection_points/injection_points.c    | 39 +++++++---
src/test/modules/injection_points/meson.build      |  1 +
.../injection_points/specs/wait_cleanup.spec       | 50 +++++++++++++
5 files changed, 166 insertions(+), 12 deletions(-)



view thread (4+ messages)  latest in thread

Message-ID: <E1wmm8K-00000000Ob1-14U0@gemulon.postgresql.org>
Permalink:  ../E1wmm8K-00000000Ob1-14U0@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1wmm8K-00000000Ob1-14U0@gemulon.postgresql.org

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: michael@paquier.xyz, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: injection_points: Clear waiter slot on error and exit
  In-Reply-To: <E1wmm8K-00000000Ob1-14U0@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox