On Mon, Nov 6, 2023 at 1:57 PM Amit Kapila <amit.kapil...@gmail.com> wrote: > > On Mon, Nov 6, 2023 at 7:01 AM Zhijie Hou (Fujitsu) > <houzj.f...@fujitsu.com> wrote: > >
+static void +WalSndGetStandbySlots(List **standby_slots, bool force) +{ + if (!MyReplicationSlot->data.failover) + return; + + if (standby_slot_names_list == NIL && strcmp(standby_slot_names, "") != 0) + SlotSyncInitConfig(); + + if (force || StandbySlotNamesPreReload == NULL || + strcmp(StandbySlotNamesPreReload, standby_slot_names) != 0) + { + list_free(*standby_slots); + + if (StandbySlotNamesPreReload) + pfree(StandbySlotNamesPreReload); + + StandbySlotNamesPreReload = pstrdup(standby_slot_names); + *standby_slots = list_copy(standby_slot_names_list); + } +} I find this code bit difficult to understand. I think we don't need to maintain a global variable like StandbySlotNamesPreReload. We can use a local variable for it on the lines of what we do in StartupRereadConfig(). Then, can we think of maintaining standby_slot_names_list in something related to decoding like LogicalDecodingContext as this will be used during decoding only? -- With Regards, Amit Kapila.