pgpool: Fix lock release leak in pool_search_relcache.

From: Tatsuo Ishii <ishii(at)postgresql(dot)org>
To: pgpool-committers(at)lists(dot)postgresql(dot)org
Subject: pgpool: Fix lock release leak in pool_search_relcache.
Date: 2026-03-19 06:35:50
Message-ID: E1w36yz-00FnTv-1r@gothos.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgpool-committers

Fix lock release leak in pool_search_relcache.

pool_search_relcache did not release lock in a certain code path.
When the local relation cache does not hit, it searches the shared
relation cache if enable_shared_relcache is on. If the lock for query
cache has been already held (thus the variable "locked" is set to
true), it acquires a shared lock, then releases it and acquires an
exclusive lock to call pool_catalog_commit_cache, which needs an
exclusive lock. Since in this code path variable "locked" is set to
true, subsequent code:

if (pool_config->enable_shared_relcache && !locked)
{
pool_shmem_unlock();
POOL_SETMASK(&oldmask);
}

does not reach inside the if statement -- lock is not released. I
think to fix this, the following code requires "locked = false;"

pool_shmem_unlock();
pool_shmem_lock(POOL_MEMQ_EXCLUSIVE_LOCK);
pool_catalog_commit_cache(backend, query, query_cache_data, query_cache_len);

Also I made following changes:

- the variable name "locked" is confusing. To clarify the role of the
variable, its name is changed to "locked_by_others".

- Fix per_node_statement_log is called even though actual query is
not sent to backend.

Discussion: https://www.postgresql.org/message-id/20260317.182615.1046517700474336117.ishii%40postgresql.org
Backpatch-through: v4.4 where shared lock was introduced.

Branch
------
V4_4_STABLE

Details
-------
https://git.postgresql.org/gitweb?p=pgpool2.git;a=commitdiff;h=4095caec0af96a47e0d06f64a10362fbbf32c5a6

Modified Files
--------------
src/utils/pool_relcache.c | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)

Browse pgpool-committers by date

  From Date Subject
Next Message Tatsuo Ishii 2026-03-19 06:35:55 pgpool: Fix lock release leak in pool_search_relcache.
Previous Message Tatsuo Ishii 2026-03-09 09:19:26 pgpool: Close listening sockets before forking.