From 1824f9e56284ba8ca3ccd16e476250ec08e4846f Mon Sep 17 00:00:00 2001 From: Bertrand Drouvot Date: Thu, 8 Oct 2026 06:33:42 +0000 Subject: [PATCH v1] xlogreader: Treat any negative segment descriptor as closed The segment_close() callback is required to set ws_file to a negative value after closing a WAL segment. XLogReaderFree() only treated -1 as closed, so it could call segment_close() again if another negative sentinel was used. Test for a nonnegative descriptor instead, matching the documented callback convention. Author: Bertrand Drouvot Reviewed-by: Discussion: https://postgr.es/m/asNr203eue0R4zpZ@bdtpg --- src/backend/access/transam/xlogreader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 100.0% src/backend/access/transam/ diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index cc61f830982..1db5ca48c3f 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -175,7 +175,7 @@ XLogReaderFree(XLogReaderState *state) &state->reset_cb); #endif - if (state->seg.ws_file != -1) + if (state->seg.ws_file >= 0) state->routine.segment_close(state); if (state->decode_buffer && state->free_decode_buffer) -- 2.34.1