Re: [Bug Report + Patch] File descriptor leak when io_method=io_uring

Lætitia Avrot <laetitia.avrot@gmail.com>

From: Laetitia Avrot <laetitia.avrot@gmail.com>
To: Lucas DRAESCHER <git@draescher.fr>
Cc: cca5507 <cca5507@qq.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>
Date: 2026-06-05T15:16:21Z
Lists: pgsql-hackers
Hi Lucas,

I reviewed v3 on Debian, kernel 6.17.13, liburing 2.14.

I reproduced the bug on unpatched master: fd count doubles from 142 to 284
after killing a backend. With the patch applied, the count stays stable.
The fix works.

Build was clean, no new warnings. All 245 regression tests pass, make
check-world passes, and all 39 TAP tests pass.

The code is clean and follows PostgreSQL conventions. The null guard before
registering the callback is correct, the wrapper satisfies the
on_shmem_exit() signature, and setting pgaio_uring_contexts to NULL after
cleanup prevents a double-free.

One note for the committer: on_shmem_exit() callbacks fire in LIFO order,
so this callback runs before anything registered earlier in AioShmemInit(),
which is the safe direction. Worth confirming that no earlier-registered
callback could invalidate pgaio_uring_contexts before this one runs.

On the v1 vs v2 design question: I favour v2. The Table AM precedent
suggests PostgreSQL prefers clean interface boundaries even with a single
implementor, and Andres Freund has been explicit about this in the past.

Marking as Ready for Committer.

Regards,

Lætitia

Le ven. 5 juin 2026 à 17:15, Lucas DRAESCHER <git@draescher.fr> a écrit :

> I have attached v3 which rebases v2 on top of master.
>
> v1 still applies cleanly.
>
> Regards,
>
> Lucas

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix LATERAL references in GRAPH_TABLE with multi-label pattern