From 0a5722b60da36d50fc5be4a01f3957468951436c Mon Sep 17 00:00:00 2001 From: Alexandre Felipe Date: Fri, 2 Oct 2026 06:03:49 +0100 Subject: [PATCH 2/2] replace slock_{read,write}_* --- src/backend/access/transam/xlog.c | 70 +++++-------------- src/backend/access/transam/xlogrecovery.c | 32 +++------ src/backend/commands/repack.c | 12 +--- src/backend/postmaster/checkpointer.c | 8 +-- .../replication/logical/applyparallelworker.c | 12 +--- src/backend/replication/logical/launcher.c | 4 +- src/backend/replication/logical/slotsync.c | 4 +- src/backend/replication/logical/worker.c | 8 +-- src/backend/replication/slot.c | 8 +-- src/backend/replication/syncrep.c | 4 +- src/backend/replication/walreceiver.c | 4 +- src/backend/replication/walreceiverfuncs.c | 8 +-- src/backend/replication/walsender.c | 32 +++------ src/backend/storage/buffer/freelist.c | 4 +- src/backend/storage/ipc/barrier.c | 4 +- src/backend/storage/ipc/shm_mq.c | 12 +--- src/backend/storage/lmgr/lwlock.c | 8 +-- 17 files changed, 59 insertions(+), 175 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 9ec0be77ca0..990f7933523 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -1620,9 +1620,7 @@ WaitXLogInsertionsToFinish(XLogRecPtr upto) return inserted; /* Read the current insert position */ - SpinLockAcquire(&Insert->insertpos_lck); - bytepos = Insert->CurrBytePos; - SpinLockRelease(&Insert->insertpos_lck); + bytepos = slock_read_uint64(&Insert->insertpos_lck, &Insert->CurrBytePos); reservedUpto = XLogBytePosToEndRecPtr(bytepos); /* @@ -2748,9 +2746,7 @@ XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN) void XLogSetReplicationSlotMinimumLSN(XLogRecPtr lsn) { - SpinLockAcquire(&XLogCtl->info_lck); - XLogCtl->replicationSlotMinLSN = lsn; - SpinLockRelease(&XLogCtl->info_lck); + slock_write_uint64(&XLogCtl->info_lck, &XLogCtl->replicationSlotMinLSN, lsn); } @@ -2763,9 +2759,7 @@ XLogGetReplicationSlotMinimumLSN(void) { XLogRecPtr retval; - SpinLockAcquire(&XLogCtl->info_lck); - retval = XLogCtl->replicationSlotMinLSN; - SpinLockRelease(&XLogCtl->info_lck); + retval = slock_read_uint64(&XLogCtl->info_lck, &XLogCtl->replicationSlotMinLSN); return retval; } @@ -3081,7 +3075,7 @@ XLogBackgroundFlush(void) */ insertTLI = XLogCtl->InsertTimeLineID; - /* read updated LogwrtRqst */ + /* read updated LogwrtRqst struct */ SpinLockAcquire(&XLogCtl->info_lck); WriteRqst = XLogCtl->LogwrtRqst; SpinLockRelease(&XLogCtl->info_lck); @@ -3841,9 +3835,7 @@ CheckXLogRemoved(XLogSegNo segno, TimeLineID tli) int save_errno = errno; XLogSegNo lastRemovedSegNo; - SpinLockAcquire(&XLogCtl->info_lck); - lastRemovedSegNo = XLogCtl->lastRemovedSegNo; - SpinLockRelease(&XLogCtl->info_lck); + lastRemovedSegNo = slock_read_uint64(&XLogCtl->info_lck, &XLogCtl->lastRemovedSegNo); if (segno <= lastRemovedSegNo) { @@ -3871,9 +3863,7 @@ XLogGetLastRemovedSegno(void) { XLogSegNo lastRemovedSegNo; - SpinLockAcquire(&XLogCtl->info_lck); - lastRemovedSegNo = XLogCtl->lastRemovedSegNo; - SpinLockRelease(&XLogCtl->info_lck); + lastRemovedSegNo = slock_read_uint64(&XLogCtl->info_lck, &XLogCtl->lastRemovedSegNo); return lastRemovedSegNo; } @@ -5109,9 +5099,7 @@ CheckReplayedDataChecksumState(uint32 replayed_state) if (!reachedConsistency) return; - SpinLockAcquire(&XLogCtl->info_lck); - local_state = XLogCtl->data_checksum_version; - SpinLockRelease(&XLogCtl->info_lck); + local_state = slock_read_uint32(&XLogCtl->info_lck, &XLogCtl->data_checksum_version); if (replayed_state == local_state) { @@ -6994,9 +6982,7 @@ SwitchIntoArchiveRecovery(XLogRecPtr EndRecPtr, TimeLineID replayTLI) * We update SharedRecoveryState while holding the lock on ControlFileLock * so both states are consistent in shared memory. */ - SpinLockAcquire(&XLogCtl->info_lck); - XLogCtl->SharedRecoveryState = RECOVERY_STATE_ARCHIVE; - SpinLockRelease(&XLogCtl->info_lck); + slock_write_uint32(&XLogCtl->info_lck, &XLogCtl->SharedRecoveryState, RECOVERY_STATE_ARCHIVE); LWLockRelease(ControlFileLock); } @@ -7057,9 +7043,7 @@ PerformRecoveryXLogAction(void) * transition are still only in the buffer pool, so take the full * checkpoint below instead of the lightweight record. */ - SpinLockAcquire(&XLogCtl->info_lck); - checksum_state = XLogCtl->data_checksum_version; - SpinLockRelease(&XLogCtl->info_lck); + checksum_state = slock_read_uint32(&XLogCtl->info_lck, &XLogCtl->data_checksum_version); flushForChecksums = (checksum_state == PG_DATA_CHECKSUM_VERSION && ControlFile->data_checksum_version != checksum_state); @@ -7150,9 +7134,7 @@ GetRecoveryState(void) { RecoveryState retval; - SpinLockAcquire(&XLogCtl->info_lck); - retval = XLogCtl->SharedRecoveryState; - SpinLockRelease(&XLogCtl->info_lck); + retval = slock_read_uint32(&XLogCtl->info_lck, &XLogCtl->SharedRecoveryState); return retval; } @@ -7223,9 +7205,7 @@ GetRedoRecPtr(void) * Insert->RedoRecPtr, someone might update it just after we've released * the lock. */ - SpinLockAcquire(&XLogCtl->info_lck); - ptr = XLogCtl->RedoRecPtr; - SpinLockRelease(&XLogCtl->info_lck); + ptr = slock_read_uint64(&XLogCtl->info_lck, &XLogCtl->RedoRecPtr); if (RedoRecPtr < ptr) RedoRecPtr = ptr; @@ -7316,9 +7296,7 @@ GetWALInsertionTimeLineIfSet(void) { TimeLineID insertTLI; - SpinLockAcquire(&XLogCtl->info_lck); - insertTLI = XLogCtl->InsertTimeLineID; - SpinLockRelease(&XLogCtl->info_lck); + insertTLI = slock_read_uint32(&XLogCtl->info_lck, &XLogCtl->InsertTimeLineID); return insertTLI; } @@ -9697,9 +9675,7 @@ xlog2_redo(XLogReaderState *record) memcpy(&state, XLogRecGetData(record), sizeof(xl_checksum_state)); - SpinLockAcquire(&XLogCtl->info_lck); - watermark = XLogCtl->data_checksum_lsn; - SpinLockRelease(&XLogCtl->info_lck); + watermark = slock_read_uint64(&XLogCtl->info_lck, &XLogCtl->data_checksum_lsn); /* * Skip records this node has already applied. The control file @@ -10100,9 +10076,7 @@ do_pg_backup_start(const char *backupidstr, bool fast, List **tablespaces, * (i.e., since last restartpoint used as backup starting * checkpoint) contain full-page writes. */ - SpinLockAcquire(&XLogCtl->info_lck); - recptr = XLogCtl->lastFpwDisableRecPtr; - SpinLockRelease(&XLogCtl->info_lck); + recptr = slock_read_uint64(&XLogCtl->info_lck, &XLogCtl->lastFpwDisableRecPtr); if (!checkpointfpw || state->startpoint <= recptr) ereport(ERROR, @@ -10396,9 +10370,7 @@ do_pg_backup_stop(BackupState *state, bool waitforarchive) * Check to see if all WAL replayed during online backup contain * full-page writes. */ - SpinLockAcquire(&XLogCtl->info_lck); - recptr = XLogCtl->lastFpwDisableRecPtr; - SpinLockRelease(&XLogCtl->info_lck); + recptr = slock_read_uint64(&XLogCtl->info_lck, &XLogCtl->lastFpwDisableRecPtr); if (state->startpoint <= recptr) ereport(ERROR, @@ -10613,9 +10585,7 @@ GetXLogInsertRecPtr(void) XLogCtlInsert *Insert = &XLogCtl->Insert; uint64 current_bytepos; - SpinLockAcquire(&Insert->insertpos_lck); - current_bytepos = Insert->CurrBytePos; - SpinLockRelease(&Insert->insertpos_lck); + current_bytepos = slock_read_uint64(&Insert->insertpos_lck, &Insert->CurrBytePos); return XLogBytePosToRecPtr(current_bytepos); } @@ -10629,9 +10599,7 @@ GetXLogInsertEndRecPtr(void) XLogCtlInsert *Insert = &XLogCtl->Insert; uint64 current_bytepos; - SpinLockAcquire(&Insert->insertpos_lck); - current_bytepos = Insert->CurrBytePos; - SpinLockRelease(&Insert->insertpos_lck); + current_bytepos = slock_read_uint64(&Insert->insertpos_lck, &Insert->CurrBytePos); return XLogBytePosToEndRecPtr(current_bytepos); } @@ -10706,7 +10674,5 @@ IsInstallXLogFileSegmentActive(void) void SetWalWriterSleeping(bool sleeping) { - SpinLockAcquire(&XLogCtl->info_lck); - XLogCtl->WalWriterSleeping = sleeping; - SpinLockRelease(&XLogCtl->info_lck); + slock_write_uint8(&XLogCtl->info_lck, &XLogCtl->WalWriterSleeping, sleeping); } diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index 54aaec9529f..d19c62563b4 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -3062,9 +3062,7 @@ GetRecoveryPauseState(void) { RecoveryPauseState state; - SpinLockAcquire(&XLogRecoveryCtl->info_lck); - state = XLogRecoveryCtl->recoveryPauseState; - SpinLockRelease(&XLogRecoveryCtl->info_lck); + state = slock_read_uint32(&XLogRecoveryCtl->info_lck, &XLogRecoveryCtl->recoveryPauseState); return state; } @@ -4635,9 +4627,7 @@ GetCurrentReplayRecPtr(TimeLineID *replayEndTLI) static void SetLatestXTime(TimestampTz xtime) { - SpinLockAcquire(&XLogRecoveryCtl->info_lck); - XLogRecoveryCtl->recoveryLastXTime = xtime; - SpinLockRelease(&XLogRecoveryCtl->info_lck); + slock_write_uint64(&XLogRecoveryCtl->info_lck, &XLogRecoveryCtl->recoveryLastXTime, xtime); } /* @@ -4648,9 +4638,7 @@ GetLatestXTime(void) { TimestampTz xtime; - SpinLockAcquire(&XLogRecoveryCtl->info_lck); - xtime = XLogRecoveryCtl->recoveryLastXTime; - SpinLockRelease(&XLogRecoveryCtl->info_lck); + xtime = slock_read_uint64(&XLogRecoveryCtl->info_lck, &XLogRecoveryCtl->recoveryLastXTime); return xtime; } @@ -4664,9 +4652,7 @@ GetLatestXTime(void) static void SetCurrentChunkStartTime(TimestampTz xtime) { - SpinLockAcquire(&XLogRecoveryCtl->info_lck); - XLogRecoveryCtl->currentChunkStartTime = xtime; - SpinLockRelease(&XLogRecoveryCtl->info_lck); + slock_write_uint64(&XLogRecoveryCtl->info_lck, &XLogRecoveryCtl->currentChunkStartTime, xtime); } /* @@ -4678,9 +4664,7 @@ GetCurrentChunkReplayStartTime(void) { TimestampTz xtime; - SpinLockAcquire(&XLogRecoveryCtl->info_lck); - xtime = XLogRecoveryCtl->currentChunkStartTime; - SpinLockRelease(&XLogRecoveryCtl->info_lck); + xtime = slock_read_uint64(&XLogRecoveryCtl->info_lck, &XLogRecoveryCtl->currentChunkStartTime); return xtime; } diff --git a/src/backend/commands/repack.c b/src/backend/commands/repack.c index 596c1abaf78..82a10bbc83c 100644 --- a/src/backend/commands/repack.c +++ b/src/backend/commands/repack.c @@ -3170,9 +3170,7 @@ process_concurrent_changes(XLogRecPtr end_of_wal, ChangeContext *chgcxt, bool do { int last_exported; - SpinLockAcquire(&shared->mutex); - last_exported = shared->last_exported; - SpinLockRelease(&shared->mutex); + last_exported = slock_read_uint32(&shared->mutex, &shared->last_exported); /* * Has the worker exported the file we are waiting for? @@ -4062,9 +4058,7 @@ get_initial_snapshot(DecodingWorker *worker) { int last_exported; - SpinLockAcquire(&shared->mutex); - last_exported = shared->last_exported; - SpinLockRelease(&shared->mutex); + last_exported = slock_read_uint32(&shared->mutex, &shared->last_exported); /* * Has the worker exported the file we are waiting for? diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index 580c7944119..6230438f883 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -1149,9 +1149,7 @@ RequestCheckpoint(int flags) ConditionVariablePrepareToSleep(&CheckpointerShmem->start_cv); for (;;) { - SpinLockAcquire(&CheckpointerShmem->ckpt_lck); - new_started = CheckpointerShmem->ckpt_started; - SpinLockRelease(&CheckpointerShmem->ckpt_lck); + new_started = slock_read_uint32(&CheckpointerShmem->ckpt_lck, &CheckpointerShmem->ckpt_started); if (new_started != old_started) break; @@ -1517,9 +1515,7 @@ FirstCallSinceLastCheckpoint(void) int new_done; bool FirstCall = false; - SpinLockAcquire(&CheckpointerShmem->ckpt_lck); - new_done = CheckpointerShmem->ckpt_done; - SpinLockRelease(&CheckpointerShmem->ckpt_lck); + new_done = slock_read_uint32(&CheckpointerShmem->ckpt_lck, &CheckpointerShmem->ckpt_done); if (new_done != ckpt_done) FirstCall = true; diff --git a/src/backend/replication/logical/applyparallelworker.c b/src/backend/replication/logical/applyparallelworker.c index 96bf499e49c..9ee7cd99c5e 100644 --- a/src/backend/replication/logical/applyparallelworker.c +++ b/src/backend/replication/logical/applyparallelworker.c @@ -1327,9 +1327,7 @@ void pa_set_xact_state(ParallelApplyWorkerShared *wshared, ParallelTransState xact_state) { - SpinLockAcquire(&wshared->mutex); - wshared->xact_state = xact_state; - SpinLockRelease(&wshared->mutex); + slock_write_uint32(&wshared->mutex, &wshared->xact_state, xact_state); } /* @@ -1340,9 +1338,7 @@ pa_get_xact_state(ParallelApplyWorkerShared *wshared) { ParallelTransState xact_state; - SpinLockAcquire(&wshared->mutex); - xact_state = wshared->xact_state; - SpinLockRelease(&wshared->mutex); + xact_state = slock_read_uint32(&wshared->mutex, &wshared->xact_state); return xact_state; } @@ -1541,9 +1537,7 @@ pa_get_fileset_state(void) Assert(am_parallel_apply_worker()); - SpinLockAcquire(&MyParallelShared->mutex); - fileset_state = MyParallelShared->fileset_state; - SpinLockRelease(&MyParallelShared->mutex); + fileset_state = slock_read_uint32(&MyParallelShared->mutex, &MyParallelShared->fileset_state); return fileset_state; } diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index 5057a928adb..5dcd06a3cfb 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -1490,9 +1490,7 @@ collect_min_nonremovable_xid(Subscription *sub, LogicalRepWorker *worker, if (worker) { - SpinLockAcquire(&worker->relmutex); - nonremovable_xid = worker->oldest_nonremovable_xid; - SpinLockRelease(&worker->relmutex); + nonremovable_xid = slock_read_uint32(&worker->relmutex, &worker->oldest_nonremovable_xid); } /* diff --git a/src/backend/replication/logical/slotsync.c b/src/backend/replication/logical/slotsync.c index c0403893e23..bd91039a6b3 100644 --- a/src/backend/replication/logical/slotsync.c +++ b/src/backend/replication/logical/slotsync.c @@ -205,9 +205,7 @@ update_slotsync_skip_stats(SlotSyncSkipReason skip_reason) /* Update the slot sync skip reason */ if (slot->slotsync_skip_reason != skip_reason) { - SpinLockAcquire(&slot->mutex); - slot->slotsync_skip_reason = skip_reason; - SpinLockRelease(&slot->mutex); + slock_write_uint32(&slot->mutex, &slot->slotsync_skip_reason, skip_reason); } } diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 44d735cdc55..0fcacaff7a8 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -3387,9 +3387,7 @@ FindDeletedTupleInLocalRel(Relation localrel, errmsg("could not detect conflict as the leader apply worker has exited"))); } - SpinLockAcquire(&leader->relmutex); - oldestxmin = leader->oldest_nonremovable_xid; - SpinLockRelease(&leader->relmutex); + oldestxmin = slock_read_uint32(&leader->relmutex, &leader->oldest_nonremovable_xid); LWLockRelease(LogicalRepWorkerLock); } @@ -4883,9 +4881,7 @@ stop_conflict_info_retention(RetainDeadTuplesData *rdt_data) if (!update_retention_status(false)) return; - SpinLockAcquire(&MyLogicalRepWorker->relmutex); - MyLogicalRepWorker->oldest_nonremovable_xid = InvalidTransactionId; - SpinLockRelease(&MyLogicalRepWorker->relmutex); + slock_write_uint32(&MyLogicalRepWorker->relmutex, &MyLogicalRepWorker->oldest_nonremovable_xid, InvalidTransactionId); ereport(LOG, errmsg("logical replication worker for subscription \"%s\" has stopped retaining the information for detecting conflicts", diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 839730e929d..9a79dd46f2c 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -801,9 +801,7 @@ ReplicationSlotRelease(void) if (!TransactionIdIsValid(slot->data.xmin) && TransactionIdIsValid(slot->effective_xmin)) { - SpinLockAcquire(&slot->mutex); - slot->effective_xmin = InvalidTransactionId; - SpinLockRelease(&slot->mutex); + slock_write_uint32(&slot->mutex, &slot->effective_xmin, InvalidTransactionId); ReplicationSlotsComputeRequiredXmin(false); } @@ -1104,9 +1102,7 @@ ReplicationSlotDropPtr(ReplicationSlot *slot) { bool fail_softly = slot->data.persistency != RS_PERSISTENT; - SpinLockAcquire(&slot->mutex); - slot->active_proc = INVALID_PROC_NUMBER; - SpinLockRelease(&slot->mutex); + slock_write_uint32(&slot->mutex, &slot->active_proc, INVALID_PROC_NUMBER); /* wake up anyone waiting on this slot */ ConditionVariableBroadcast(&slot->active_cv); diff --git a/src/backend/replication/syncrep.c b/src/backend/replication/syncrep.c index d870f09e0a0..3b09805bac6 100644 --- a/src/backend/replication/syncrep.c +++ b/src/backend/replication/syncrep.c @@ -463,9 +463,7 @@ SyncRepInitConfig(void) priority = SyncRepGetStandbyPriority(); if (MyWalSnd->sync_standby_priority != priority) { - SpinLockAcquire(&MyWalSnd->mutex); - MyWalSnd->sync_standby_priority = priority; - SpinLockRelease(&MyWalSnd->mutex); + slock_write_uint32(&MyWalSnd->mutex, &MyWalSnd->sync_standby_priority, priority); ereport(DEBUG1, (errmsg_internal("standby \"%s\" now has synchronous standby priority %d", diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index b93e699ba4b..0aa05d6d99a 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -1481,9 +1481,7 @@ WalRcvRequestApplyReply(void) WalRcv->apply_reply_requested = true; /* fetching the proc number is probably atomic, but don't rely on it */ - SpinLockAcquire(&WalRcv->mutex); - procno = WalRcv->procno; - SpinLockRelease(&WalRcv->mutex); + procno = slock_read_uint32(&WalRcv->mutex, &WalRcv->procno); if (procno != INVALID_PROC_NUMBER) SetLatch(&GetPGProcByNumber(procno)->procLatch); } diff --git a/src/backend/replication/walreceiverfuncs.c b/src/backend/replication/walreceiverfuncs.c index ecf510517eb..01c720c7442 100644 --- a/src/backend/replication/walreceiverfuncs.c +++ b/src/backend/replication/walreceiverfuncs.c @@ -126,9 +126,7 @@ WalRcvGetState(void) WalRcvData *walrcv = WalRcv; WalRcvState state; - SpinLockAcquire(&walrcv->mutex); - state = walrcv->walRcvState; - SpinLockRelease(&walrcv->mutex); + state = slock_read_uint32(&walrcv->mutex, &walrcv->walRcvState); return state; } @@ -397,9 +395,7 @@ GetReplicationApplyDelay(void) XLogRecPtr replayPtr; TimestampTz chunkReplayStartTime; - SpinLockAcquire(&walrcv->mutex); - receivePtr = walrcv->flushedUpto; - SpinLockRelease(&walrcv->mutex); + receivePtr = slock_read_uint64(&walrcv->mutex, &walrcv->flushedUpto); replayPtr = GetXLogReplayRecPtr(NULL); diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index e9331de3df5..68ea470a389 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -1013,9 +1013,7 @@ StartReplication(StartReplicationCmd *cmd) sentPtr = cmd->startpoint; /* Initialize shared memory status, too */ - SpinLockAcquire(&MyWalSnd->mutex); - MyWalSnd->sentPtr = sentPtr; - SpinLockRelease(&MyWalSnd->mutex); + slock_write_uint64(&MyWalSnd->mutex, &MyWalSnd->sentPtr, sentPtr); SyncRepInitConfig(); @@ -2773,9 +2771,7 @@ ProcessStandbyHSFeedbackMessage(void) { WalSnd *walsnd = MyWalSnd; - SpinLockAcquire(&walsnd->mutex); - walsnd->replyTime = replyTime; - SpinLockRelease(&walsnd->mutex); + slock_write_uint64(&walsnd->mutex, &walsnd->replyTime, replyTime); } /* @@ -2873,9 +2869,7 @@ ProcessStandbyPSRequestMessage(void) * Update shared state for this WalSender process based on reply data from * standby. */ - SpinLockAcquire(&walsnd->mutex); - walsnd->replyTime = replyTime; - SpinLockRelease(&walsnd->mutex); + slock_write_uint64(&walsnd->mutex, &walsnd->replyTime, replyTime); /* * Consider transactions in the current database, as only these are the @@ -3296,9 +3290,7 @@ WalSndKill(int code, Datum arg) MyWalSnd = NULL; - SpinLockAcquire(&walsnd->mutex); - /* Mark WalSnd struct as no longer being in use. */ - walsnd->pid = 0; + slock_write_uint32(&walsnd->mutex, &walsnd->pid, 0); SpinLockRelease(&walsnd->mutex); } @@ -3672,9 +3664,7 @@ retry: { WalSnd *walsnd = MyWalSnd; - SpinLockAcquire(&walsnd->mutex); - walsnd->sentPtr = sentPtr; - SpinLockRelease(&walsnd->mutex); + slock_write_uint64(&walsnd->mutex, &walsnd->sentPtr, sentPtr); } /* Report progress of XLOG streaming in PS display */ @@ -3769,9 +3759,7 @@ XLogSendLogical(void) { WalSnd *walsnd = MyWalSnd; - SpinLockAcquire(&walsnd->mutex); - walsnd->sentPtr = sentPtr; - SpinLockRelease(&walsnd->mutex); + slock_write_uint64(&walsnd->mutex, &walsnd->sentPtr, sentPtr); } } @@ -4160,9 +4148,7 @@ WalSndInitStopping(void) WalSnd *walsnd = &WalSndCtl->walsnds[i]; pid_t pid; - SpinLockAcquire(&walsnd->mutex); - pid = walsnd->pid; - SpinLockRelease(&walsnd->mutex); + pid = slock_read_uint32(&walsnd->mutex, &walsnd->pid); if (pid == 0) continue; @@ -4224,9 +4210,7 @@ WalSndSetState(WalSndState state) if (walsnd->state == state) return; - SpinLockAcquire(&walsnd->mutex); - walsnd->state = state; - SpinLockRelease(&walsnd->mutex); + slock_write_uint32(&walsnd->mutex, &walsnd->state, state); } /* diff --git a/src/backend/storage/buffer/freelist.c b/src/backend/storage/buffer/freelist.c index fdb5bad7910..1318905e05f 100644 --- a/src/backend/storage/buffer/freelist.c +++ b/src/backend/storage/buffer/freelist.c @@ -372,9 +372,7 @@ StrategyNotifyBgWriter(int bgwprocno) * atomic to StrategyGetBuffer. The bgwriter should call this rather * infrequently, so there's no performance penalty from being safe. */ - SpinLockAcquire(&StrategyControl->buffer_strategy_lock); - StrategyControl->bgwprocno = bgwprocno; - SpinLockRelease(&StrategyControl->buffer_strategy_lock); + slock_write_uint32(&StrategyControl->buffer_strategy_lock, &StrategyControl->bgwprocno, bgwprocno); } diff --git a/src/backend/storage/ipc/barrier.c b/src/backend/storage/ipc/barrier.c index 3fba281a75c..492b117f006 100644 --- a/src/backend/storage/ipc/barrier.c +++ b/src/backend/storage/ipc/barrier.c @@ -282,9 +282,7 @@ BarrierParticipants(Barrier *barrier) { int participants; - SpinLockAcquire(&barrier->mutex); - participants = barrier->participants; - SpinLockRelease(&barrier->mutex); + participants = slock_read_uint32(&barrier->mutex, &barrier->participants); return participants; } diff --git a/src/backend/storage/ipc/shm_mq.c b/src/backend/storage/ipc/shm_mq.c index 26b24158ed9..b30bff88612 100644 --- a/src/backend/storage/ipc/shm_mq.c +++ b/src/backend/storage/ipc/shm_mq.c @@ -245,9 +245,7 @@ shm_mq_get_receiver(shm_mq *mq) { PGPROC *receiver; - SpinLockAcquire(&mq->mq_mutex); - receiver = mq->mq_receiver; - SpinLockRelease(&mq->mq_mutex); + receiver = slock_read_ptr(&mq->mq_mutex, &mq->mq_receiver); return receiver; } @@ -260,9 +258,7 @@ shm_mq_get_sender(shm_mq *mq) { PGPROC *sender; - SpinLockAcquire(&mq->mq_mutex); - sender = mq->mq_sender; - SpinLockRelease(&mq->mq_mutex); + sender = slock_read_ptr(&mq->mq_mutex, &mq->mq_sender); return sender; } @@ -525,9 +521,7 @@ shm_mq_sendv(shm_mq_handle *mqh, shm_mq_iovec *iov, int iovcnt, bool nowait, receiver = mq->mq_receiver; else { - SpinLockAcquire(&mq->mq_mutex); - receiver = mq->mq_receiver; - SpinLockRelease(&mq->mq_mutex); + receiver = slock_read_ptr(&mq->mq_mutex, &mq->mq_receiver); if (receiver != NULL) mqh->mqh_counterparty_attached = true; } diff --git a/src/backend/storage/lmgr/lwlock.c b/src/backend/storage/lmgr/lwlock.c index 82a1d4d2e26..a9ed2875bd7 100644 --- a/src/backend/storage/lmgr/lwlock.c +++ b/src/backend/storage/lmgr/lwlock.c @@ -521,9 +521,7 @@ InitLWLockAccess(void) LWLockPadded * GetNamedLWLockTranche(const char *tranche_name) { - SpinLockAcquire(&LWLockTranches->lock); - LocalNumUserDefinedTranches = LWLockTranches->num_user_defined; - SpinLockRelease(&LWLockTranches->lock); + LocalNumUserDefinedTranches = slock_read_uint32(&LWLockTranches->lock, &LWLockTranches->num_user_defined); /* * Obtain the position of base address of LWLock belonging to requested @@ -729,9 +727,7 @@ GetLWTrancheName(uint16 trancheId) */ if (idx >= LocalNumUserDefinedTranches) { - SpinLockAcquire(&LWLockTranches->lock); - LocalNumUserDefinedTranches = LWLockTranches->num_user_defined; - SpinLockRelease(&LWLockTranches->lock); + LocalNumUserDefinedTranches = slock_read_uint32(&LWLockTranches->lock, &LWLockTranches->num_user_defined); if (idx >= LocalNumUserDefinedTranches) elog(ERROR, "tranche %d is not registered", trancheId); -- 2.53.0