Fix io_uring resource leaks across crash restarts With io_method=io_uring and restart_after_crash enabled, the postmaster reinitializes shared memory after a backend crash. It created new io_uring instances without releasing its references to the old ones, causing resources to accumulate on each crash restart. Eventually, creating new instances could fail with "Too many open files" or "Cannot allocate memory", preventing the server from restarting.
Fix this by registering an on_shmem_exit() callback to release the postmaster's references to the io_uring instances during shared memory cleanup, before creating new ones. This prevents resources from accumulating across crash restarts. Backpatch to v18, where io_method=io_uring was introduced. Reported-by: Lucas DRAESCHER <[email protected]> Author: Lucas DRAESCHER <[email protected]> Reviewed-by: ChangAo Chen <[email protected]> Reviewed-by: Ilmar Yunusov <[email protected]> Reviewed-by: Laetitia Avrot <[email protected]> Reviewed-by: Jakub Wartak <[email protected]> Reviewed-by: Fujii Masao <[email protected]> Reviewed-by: Xuneng Zhou <[email protected]> Discussion: https://postgr.es/m/zHN8Rb7syWYDBPUhCICxKLr_tQmFLg0T024irxVVb6RSSicZcqcA0eT73z2PQy7JmzzqnUzX0Hi3P2dPKRvmNx_jbAqSCLyqJvWjXEypyAI=@draescher.fr Backpatch-through: 18 Branch ------ REL_18_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/5bfe88cf6a814e24ac9c7332142a75d11a2e5461 Modified Files -------------- src/backend/storage/aio/method_io_uring.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
