aboutsummaryrefslogtreecommitdiff
path: root/src/backend/replication/logical/logical.c
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2015-10-06 15:45:02 -0400
committerRobert Haas <rhaas@postgresql.org>2015-10-06 15:45:02 -0400
commit8f6bb851bdb75d741b3a7543bbf681e3cd7e65dc (patch)
tree676d9f4141dfe2896a1ead18475529ac64172144 /src/backend/replication/logical/logical.c
parentb943f502b788a3708ca660785fd14a4ee938fdcd (diff)
downloadpostgresql-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.c49
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);
}
}