Re: walsender: Assert MyReplicationSlot is set before use

From: vignesh C <vignesh21(at)gmail(dot)com>
To: Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>
Cc: Postgres hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: walsender: Assert MyReplicationSlot is set before use
Date: 2026-02-02 06:41:34
Message-ID: CALDaNm3xkpkw97b0yD1RjL6V1721ytitXRRFC8OQf-STirZ4Lw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, 2 Feb 2026 at 11:55, Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> 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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Zhijie Hou (Fujitsu) 2026-02-02 06:43:00 RE: walsender: Assert MyReplicationSlot is set before use
Previous Message Chao Li 2026-02-02 06:29:20 Re: Wake up backends immediately when sync standbys decrease