diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index 45d027803a..9bccaceb7e 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -2847,10 +2847,12 @@ WalSndRqstFileReload(void)
 	{
 		WalSnd	   *walsnd = &WalSndCtl->walsnds[i];
 
+		SpinLockAcquire(&walsnd->mutex);
 		if (walsnd->pid == 0)
+		{
+			SpinLockRelease(&walsnd->mutex);
 			continue;
-
-		SpinLockAcquire(&walsnd->mutex);
+		}
 		walsnd->needreload = true;
 		SpinLockRelease(&walsnd->mutex);
 	}
@@ -3163,14 +3165,18 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
 		TimeOffset	flushLag;
 		TimeOffset	applyLag;
 		int			priority;
+		int			pid;
 		WalSndState state;
 		Datum		values[PG_STAT_GET_WAL_SENDERS_COLS];
 		bool		nulls[PG_STAT_GET_WAL_SENDERS_COLS];
 
+		SpinLockAcquire(&walsnd->mutex);
 		if (walsnd->pid == 0)
+		{
+			SpinLockRelease(&walsnd->mutex);
 			continue;
-
-		SpinLockAcquire(&walsnd->mutex);
+		}
+		pid = walsnd->pid;
 		sentPtr = walsnd->sentPtr;
 		state = walsnd->state;
 		write = walsnd->write;
@@ -3183,7 +3189,7 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
 		SpinLockRelease(&walsnd->mutex);
 
 		memset(nulls, 0, sizeof(nulls));
-		values[0] = Int32GetDatum(walsnd->pid);
+		values[0] = Int32GetDatum(pid);
 
 		if (!superuser())
 		{
