public inbox for [email protected]
help / color / mirror / Atom feedFrom: Tatsuo Ishii <[email protected]>
To: [email protected]
Subject: pgpool: Fix lock release leak in pool_search_relcache.
Date: Thu, 19 Mar 2026 06:36:01 +0000
Message-ID: <[email protected]> (raw)
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_6_STABLE
Details
-------
https://git.postgresql.org/gitweb?p=pgpool2.git;a=commitdiff;h=a804cc786298df1c9ff1015f22e5648b45a11...
Modified Files
--------------
src/utils/pool_relcache.c | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
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: [email protected]
Cc: [email protected], [email protected]
Subject: Re: pgpool: Fix lock release leak in pool_search_relcache.
In-Reply-To: <[email protected]>
* 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