On Mon, 2 Feb 2026 at 11:55, Chao Li <[email protected]> wrote:
>
> Hi Hackers,
>
> While reviewing patch [1], I noticed that in walsender.c, the function 
> NeedToWaitForStandbys() dereferences MyReplicationSlot->data.failover without 
> first checking whether MyReplicationSlot is NULL.
>
> Looking at the call chain:
> ```
> logical_read_xlog_page() // XLogReaderRoutine->page_read callback
> -> WalSndWaitForWal()
>     -> NeedToWaitForWal()
>        -> NeedToWaitForStandbys()
> ```
>
> None of these callers explicitly checks whether MyReplicationSlot is NULL. 
> Since they also don’t dereference MyReplicationSlot themselves, it wouldn’t 
> be fair to push that responsibility up to the callers.
>
> Looking elsewhere in the codebase, other places that dereference 
> MyReplicationSlot (for example CreateReplicationSlot()) either do an explicit 
> if (MyReplicationSlot != NULL) check or assert MyReplicationSlot != NULL. So 
> it seems reasonable to make the assumption explicit by adding an 
> Assert(MyReplicationSlot) in NeedToWaitForStandbys().
>
> Another related issue is in StartLogicalReplication(): the function initially 
> asserts MyReplicationSlot == NULL, then calls ReplicationSlotAcquire(), which 
> is expected to set up MyReplicationSlot. Since MyReplicationSlot is 
> dereferenced later in this function, I think it would be clearer and safer to 
> add an Assert(MyReplicationSlot != NULL) immediately after the call to 
> ReplicationSlotAcquire().
>
> The attached patch addresses both of these points.

You have forgotten to attach the patch.

Regards,
Vignesh


Reply via email to