1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-22 23:02:54 +03:00

Avoid useless ReplicationOriginExitCleanup locking

When session_replication_state is NULL, we can know there's nothing to
do with no lock acquisition.  Do that.

Author: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Discussion: https://postgr.es/m/CALj2ACX+YaeRU5xJqR4C7kLsTO_F7DBRNF8WgeHvJZcKtNuK_A@mail.gmail.com
This commit is contained in:
Alvaro Herrera 2024-01-15 13:02:03 +01:00
parent 31acee4b66
commit aa817c7496
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE

View File

@ -172,9 +172,10 @@ static ReplicationState *replication_states;
static ReplicationStateCtl *replication_states_ctl; static ReplicationStateCtl *replication_states_ctl;
/* /*
* Backend-local, cached element from ReplicationState for use in a backend * We keep a pointer to this backend's ReplicationState to avoid having to
* replaying remote commits, so we don't have to search ReplicationState for * search the replication_states array in replorigin_session_advance for each
* the backends current RepOriginId. * remote commit. (Ownership of a backend's own entry can only be changed by
* that backend.)
*/ */
static ReplicationState *session_replication_state = NULL; static ReplicationState *session_replication_state = NULL;
@ -1056,10 +1057,12 @@ ReplicationOriginExitCleanup(int code, Datum arg)
{ {
ConditionVariable *cv = NULL; ConditionVariable *cv = NULL;
if (session_replication_state == NULL)
return;
LWLockAcquire(ReplicationOriginLock, LW_EXCLUSIVE); LWLockAcquire(ReplicationOriginLock, LW_EXCLUSIVE);
if (session_replication_state != NULL && if (session_replication_state->acquired_by == MyProcPid)
session_replication_state->acquired_by == MyProcPid)
{ {
cv = &session_replication_state->origin_cv; cv = &session_replication_state->origin_cv;