mirror of
https://github.com/postgres/postgres.git
synced 2025-05-21 15:54:08 +03:00
Avoid creating parallel apply state hash table unless required.
This hash table is used to cache the state of streaming transactions being applied by the parallel apply workers. So, this should be created only when we are successful in launching at least one worker. This avoids rare case memory leak when we are never able to launch any worker. Author: Ted Yu Discussion: https://postgr.es/m/CALte62wg0rBR3Vj2beV=HiWo2qG9L0hzKcX=yULNER0wmf4aEw@mail.gmail.com
This commit is contained in:
parent
e753ae6397
commit
dca8b01f5f
@ -475,6 +475,10 @@ pa_allocate_worker(TransactionId xid)
|
|||||||
if (!pa_can_start())
|
if (!pa_can_start())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
winfo = pa_launch_parallel_worker();
|
||||||
|
if (!winfo)
|
||||||
|
return;
|
||||||
|
|
||||||
/* First time through, initialize parallel apply worker state hashtable. */
|
/* First time through, initialize parallel apply worker state hashtable. */
|
||||||
if (!ParallelApplyTxnHash)
|
if (!ParallelApplyTxnHash)
|
||||||
{
|
{
|
||||||
@ -490,10 +494,6 @@ pa_allocate_worker(TransactionId xid)
|
|||||||
HASH_ELEM | HASH_BLOBS | HASH_CONTEXT);
|
HASH_ELEM | HASH_BLOBS | HASH_CONTEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
winfo = pa_launch_parallel_worker();
|
|
||||||
if (!winfo)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Create an entry for the requested transaction. */
|
/* Create an entry for the requested transaction. */
|
||||||
entry = hash_search(ParallelApplyTxnHash, &xid, HASH_ENTER, &found);
|
entry = hash_search(ParallelApplyTxnHash, &xid, HASH_ENTER, &found);
|
||||||
if (found)
|
if (found)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user