Don't exit the loop with slot set unless we really found a slot.
authorRobert Haas <rhaas@postgresql.org>
Tue, 28 Jan 2014 18:33:51 +0000 (13:33 -0500)
committerRobert Haas <rhaas@postgresql.org>
Tue, 28 Jan 2014 18:33:51 +0000 (13:33 -0500)
src/backend/replication/slot.c

index 0a68dbd13671a12eed516311290976ee3d6ce60d..f3894f150252b6a81796b79e7d0a4393c817df41 100644 (file)
@@ -302,15 +302,17 @@ ReplicationSlotAcquire(const char *name)
        LWLockAcquire(ReplicationSlotControlLock, LW_SHARED);
        for (i = 0; i < max_replication_slots; i++)
        {
-               slot = &ReplicationSlotCtl->replication_slots[i];
-               if (slot->in_use && strcmp(name, NameStr(slot->name)) == 0)
+               ReplicationSlot *s = &ReplicationSlotCtl->replication_slots[i];
+
+               if (s->in_use && strcmp(name, NameStr(s->name)) == 0)
                {
-                       volatile ReplicationSlot *vslot = slot;
+                       volatile ReplicationSlot *vslot = s;
 
-                       SpinLockAcquire(&slot->mutex);
+                       SpinLockAcquire(&s->mutex);
                        active = vslot->active;
                        vslot->active = true;
-                       SpinLockRelease(&slot->mutex);
+                       SpinLockRelease(&s->mutex);
+                       slot = s;
                        break;
                }
        }
@@ -387,15 +389,17 @@ ReplicationSlotDrop(const char *name)
        LWLockAcquire(ReplicationSlotControlLock, LW_SHARED);
        for (i = 0; i < max_replication_slots; i++)
        {
-               slot = &ReplicationSlotCtl->replication_slots[i];
-               if (slot->in_use && strcmp(name, NameStr(slot->name)) == 0)
+               ReplicationSlot *s = &ReplicationSlotCtl->replication_slots[i];
+
+               if (s->in_use && strcmp(name, NameStr(s->name)) == 0)
                {
-                       volatile ReplicationSlot *vslot = slot;
+                       volatile ReplicationSlot *vslot = s;
 
-                       SpinLockAcquire(&slot->mutex);
+                       SpinLockAcquire(&s->mutex);
                        active = vslot->active;
                        vslot->active = true;
-                       SpinLockRelease(&slot->mutex);
+                       SpinLockRelease(&s->mutex);
+                       slot = s;
                        break;
                }
        }