From 412848dac37f2e4455e1505f83f0af0f3d28a67d Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 9 Oct 2026 13:59:55 +0900 Subject: [PATCH] Treat any negative ws_file as closed in xlogreader.c The segment_close() callback is required to set ws_file to a negative value after closing a WAL segment, as documented in xlogreader.h. XLogReaderFree() only treated -1 as closed, so it could call segment_close() again if another negative value was used. This should not be an issue in practice, but all the other code paths in the tree use 0 as comparison base when dealing with ws_file, except for the line updated here. Let's be consistent, at least. Author: Bertrand Drouvot Discussion: https://postgr.es/m/asNr203eue0R4zpZ@bdtpg --- src/backend/access/transam/xlogreader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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)