Re: repack: fix uninitialized DecodingWorkerShared.initialized

From: Antonin Houska <ah(at)cybertec(dot)at>
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: repack: fix uninitialized DecodingWorkerShared.initialized
Date: 2026-04-15 15:07:32
Message-ID: 26785.1776265652@localhost
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> wrote:

> I have not reviewed the repack-related patches before. Recently, I started trying to understand how repack works and trace through the code.

Thanks, I appreciate that!

> While tracing start_repack_decoding_worker(), I noticed something suspicious:
>
> ```
> seg = dsm_create(size, 0);
> shared = (DecodingWorkerShared *) dsm_segment_address(seg);
> shared->lsn_upto = InvalidXLogRecPtr;
> shared->done = false;
> SharedFileSetInit(&shared->sfs, seg);
> shared->last_exported = -1;
> SpinLockInit(&shared->mutex);
> shared->dbid = MyDatabaseId;
> ```
>
> Here, the code creates a shared-memory segment and lets “shared" point to that memory. It then initializes some fields of “shared". However, later code reads shared->initialized, but this field was not initialized:

The problem was noticed earlier this week and I already posted a fix [1].

> For the fix, since start_repack_decoding_worker() is not on a hot path, I think it is fine to zero the whole shared struct explicitly, and then initialize the non-zero fields afterwards.

Although not strongly, I prefer setting individual fields explicitly.

[1] https://www.postgresql.org/message-id/182883.1776073323%40localhost

--
Antonin Houska
Web: https://www.cybertec-postgresql.com

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Ashutosh Bapat 2026-04-15 15:07:40 Re: Bug: Missing check_stack_depth() in GRAPH_TABLE rewriter
Previous Message Ashutosh Bapat 2026-04-15 15:07:18 Re: Bug: Missing collation assignment for GRAPH_TABLE COLUMNS expressions