diff options
author | Robert Haas <rhaas@postgresql.org> | 2015-10-06 15:45:02 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2015-10-06 15:45:02 -0400 |
commit | 8f6bb851bdb75d741b3a7543bbf681e3cd7e65dc (patch) | |
tree | 676d9f4141dfe2896a1ead18475529ac64172144 /src/backend/replication/logical/logical.c | |
parent | b943f502b788a3708ca660785fd14a4ee938fdcd (diff) | |
download | postgresql-8f6bb851bdb75d741b3a7543bbf681e3cd7e65dc.tar.gz postgresql-8f6bb851bdb75d741b3a7543bbf681e3cd7e65dc.zip |
Remove more volatile qualifiers.
Prior to commit 0709b7ee72e4bc71ad07b7120acd117265ab51d0, access to
variables within a spinlock-protected critical section had to be done
through a volatile pointer, but that should no longer be necessary.
This continues work begun in df4077cda2eae3eb4a5cf387da0c1e7616e73204
and 6ba4ecbf477e0b25dd7bde1b0c4e07fc2da19348.
Thomas Munro and Michael Paquier
Diffstat (limited to 'src/backend/replication/logical/logical.c')
-rw-r--r-- | src/backend/replication/logical/logical.c | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c index 5a07e1d9a69..1ce90811cc8 100644 --- a/src/backend/replication/logical/logical.c +++ b/src/backend/replication/logical/logical.c @@ -848,16 +848,13 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) bool updated_xmin = false; bool updated_restart = false; - /* use volatile pointer to prevent code rearrangement */ - volatile ReplicationSlot *slot = MyReplicationSlot; + SpinLockAcquire(&MyReplicationSlot->mutex); - SpinLockAcquire(&slot->mutex); - - slot->data.confirmed_flush = lsn; + MyReplicationSlot->data.confirmed_flush = lsn; /* if were past the location required for bumping xmin, do so */ - if (slot->candidate_xmin_lsn != InvalidXLogRecPtr && - slot->candidate_xmin_lsn <= lsn) + if (MyReplicationSlot->candidate_xmin_lsn != InvalidXLogRecPtr && + MyReplicationSlot->candidate_xmin_lsn <= lsn) { /* * We have to write the changed xmin to disk *before* we change @@ -868,28 +865,28 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) * ->effective_xmin once the new state is synced to disk. After a * crash ->effective_xmin is set to ->xmin. */ - if (TransactionIdIsValid(slot->candidate_catalog_xmin) && - slot->data.catalog_xmin != slot->candidate_catalog_xmin) + if (TransactionIdIsValid(MyReplicationSlot->candidate_catalog_xmin) && + MyReplicationSlot->data.catalog_xmin != MyReplicationSlot->candidate_catalog_xmin) { - slot->data.catalog_xmin = slot->candidate_catalog_xmin; - slot->candidate_catalog_xmin = InvalidTransactionId; - slot->candidate_xmin_lsn = InvalidXLogRecPtr; + MyReplicationSlot->data.catalog_xmin = MyReplicationSlot->candidate_catalog_xmin; + MyReplicationSlot->candidate_catalog_xmin = InvalidTransactionId; + MyReplicationSlot->candidate_xmin_lsn = InvalidXLogRecPtr; updated_xmin = true; } } - if (slot->candidate_restart_valid != InvalidXLogRecPtr && - slot->candidate_restart_valid <= lsn) + if (MyReplicationSlot->candidate_restart_valid != InvalidXLogRecPtr && + MyReplicationSlot->candidate_restart_valid <= lsn) { - Assert(slot->candidate_restart_lsn != InvalidXLogRecPtr); + Assert(MyReplicationSlot->candidate_restart_lsn != InvalidXLogRecPtr); - slot->data.restart_lsn = slot->candidate_restart_lsn; - slot->candidate_restart_lsn = InvalidXLogRecPtr; - slot->candidate_restart_valid = InvalidXLogRecPtr; + MyReplicationSlot->data.restart_lsn = MyReplicationSlot->candidate_restart_lsn; + MyReplicationSlot->candidate_restart_lsn = InvalidXLogRecPtr; + MyReplicationSlot->candidate_restart_valid = InvalidXLogRecPtr; updated_restart = true; } - SpinLockRelease(&slot->mutex); + SpinLockRelease(&MyReplicationSlot->mutex); /* first write new xmin to disk, so we know whats up after a crash */ if (updated_xmin || updated_restart) @@ -907,9 +904,9 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) */ if (updated_xmin) { - SpinLockAcquire(&slot->mutex); - slot->effective_catalog_xmin = slot->data.catalog_xmin; - SpinLockRelease(&slot->mutex); + SpinLockAcquire(&MyReplicationSlot->mutex); + MyReplicationSlot->effective_catalog_xmin = MyReplicationSlot->data.catalog_xmin; + SpinLockRelease(&MyReplicationSlot->mutex); ReplicationSlotsComputeRequiredXmin(false); ReplicationSlotsComputeRequiredLSN(); @@ -917,10 +914,8 @@ LogicalConfirmReceivedLocation(XLogRecPtr lsn) } else { - volatile ReplicationSlot *slot = MyReplicationSlot; - - SpinLockAcquire(&slot->mutex); - slot->data.confirmed_flush = lsn; - SpinLockRelease(&slot->mutex); + SpinLockAcquire(&MyReplicationSlot->mutex); + MyReplicationSlot->data.confirmed_flush = lsn; + SpinLockRelease(&MyReplicationSlot->mutex); } } |