| 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(-)
| 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. |