mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Avoid treating WAL senders as normal backends.
The previous coding treated anything that wasn't an autovacuum launcher as a normal backend, which is wrong now that we also have WAL senders. Fujii Masao, reviewed by Robert Haas, Alvaro Herrera, Tom Lane, and Bernd Helmle.
This commit is contained in:
parent
fb4c5d2798
commit
a0c75f5539
@ -3167,13 +3167,25 @@ SignalSomeChildren(int signal, int target)
|
||||
|
||||
if (bp->dead_end)
|
||||
continue;
|
||||
if (!(target & BACKEND_TYPE_NORMAL) && !bp->is_autovacuum)
|
||||
continue;
|
||||
if (!(target & BACKEND_TYPE_AUTOVAC) && bp->is_autovacuum)
|
||||
continue;
|
||||
if (!(target & BACKEND_TYPE_WALSND) &&
|
||||
IsPostmasterChildWalSender(bp->child_slot))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Since target == BACKEND_TYPE_ALL is the most common case,
|
||||
* we test it first and avoid touching shared memory for
|
||||
* every child.
|
||||
*/
|
||||
if (target != BACKEND_TYPE_ALL)
|
||||
{
|
||||
int child;
|
||||
|
||||
if (bp->is_autovacuum)
|
||||
child = BACKEND_TYPE_AUTOVAC;
|
||||
else if (IsPostmasterChildWalSender(bp->child_slot))
|
||||
child = BACKEND_TYPE_WALSND;
|
||||
else
|
||||
child = BACKEND_TYPE_NORMAL;
|
||||
if (!(target & child))
|
||||
continue;
|
||||
}
|
||||
|
||||
ereport(DEBUG4,
|
||||
(errmsg_internal("sending signal %d to process %d",
|
||||
@ -4380,13 +4392,25 @@ CountChildren(int target)
|
||||
|
||||
if (bp->dead_end)
|
||||
continue;
|
||||
if (!(target & BACKEND_TYPE_NORMAL) && !bp->is_autovacuum)
|
||||
continue;
|
||||
if (!(target & BACKEND_TYPE_AUTOVAC) && bp->is_autovacuum)
|
||||
continue;
|
||||
if (!(target & BACKEND_TYPE_WALSND) &&
|
||||
IsPostmasterChildWalSender(bp->child_slot))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Since target == BACKEND_TYPE_ALL is the most common case,
|
||||
* we test it first and avoid touching shared memory for
|
||||
* every child.
|
||||
*/
|
||||
if (target != BACKEND_TYPE_ALL)
|
||||
{
|
||||
int child;
|
||||
|
||||
if (bp->is_autovacuum)
|
||||
child = BACKEND_TYPE_AUTOVAC;
|
||||
else if (IsPostmasterChildWalSender(bp->child_slot))
|
||||
child = BACKEND_TYPE_WALSND;
|
||||
else
|
||||
child = BACKEND_TYPE_NORMAL;
|
||||
if (!(target & child))
|
||||
continue;
|
||||
}
|
||||
|
||||
cnt++;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user