diff options
-rw-r--r-- | src/backend/replication/slot.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index b42861d6259..aff100b192a 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -1103,6 +1103,7 @@ RestoreSlotFromDisk(const char *name) { ReplicationSlotOnDisk cp; int i; + char slotdir[MAXPGPATH + 12]; char path[MAXPGPATH + 22]; int fd; bool restored = false; @@ -1112,13 +1113,14 @@ RestoreSlotFromDisk(const char *name) /* no need to lock here, no concurrent access allowed yet */ /* delete temp file if it exists */ - sprintf(path, "pg_replslot/%s/state.tmp", name); + sprintf(slotdir, "pg_replslot/%s", name); + sprintf(path, "%s/state.tmp", slotdir); if (unlink(path) < 0 && errno != ENOENT) ereport(PANIC, (errcode_for_file_access(), errmsg("could not remove file \"%s\": %m", path))); - sprintf(path, "pg_replslot/%s/state", name); + sprintf(path, "%s/state", slotdir); elog(DEBUG1, "restoring replication slot from \"%s\"", path); @@ -1151,7 +1153,7 @@ RestoreSlotFromDisk(const char *name) /* Also sync the parent directory */ START_CRIT_SECTION(); - fsync_fname(path, true); + fsync_fname(slotdir, true); END_CRIT_SECTION(); /* read part of statefile that's guaranteed to be version independent */ @@ -1226,13 +1228,11 @@ RestoreSlotFromDisk(const char *name) */ if (cp.slotdata.persistency != RS_PERSISTENT) { - sprintf(path, "pg_replslot/%s", name); - - if (!rmtree(path, true)) + if (!rmtree(slotdir, true)) { ereport(WARNING, (errcode_for_file_access(), - errmsg("could not remove directory \"%s\"", path))); + errmsg("could not remove directory \"%s\"", slotdir))); } fsync_fname("pg_replslot", true); return; |