[PATCH] Fix EINTR retry condition in pg_flush_data sync_file_range path.
DaeMyung Kang <charsyam@gmail.com>
From: DaeMyung Kang <charsyam@gmail.com>
To: pgsql-hackers@lists.postgresql.org
Cc: DaeMyung Kang <charsyam@gmail.com>
Date: 2026-04-29T15:18:11Z
Lists: pgsql-hackers
Attachments
- 0001-Fix-EINTR-retry-condition-in-pg_flush_data-sync_file.patch (text/x-patch) patch 0001
Hi, Hackers, While auditing src/backend/storage/file, I spotted a small but unambiguous bug in pg_flush_data()'s sync_file_range() retry path. Details below in the commit message; the fix is a one-token change. Thanks, DaeMyung --- The retry branch compared the syscall return value (rc) against EINTR, but sync_file_range() returns -1 on error and reports the actual errno out-of-band, so rc == EINTR was always false and the retry was dead code. When sync_file_range() was actually interrupted by a signal, control fell through to the warning/error path instead of retrying. Compare errno instead, matching the convention already used elsewhere in this file (e.g. the pg_pread/pg_pwrite EINTR retries) and a few lines down for ENOSYS in this same block. --- src/backend/storage/file/fd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix errno check based on EINTR in pg_flush_data()
- 3b35c10a4d50 16.14 landed
- 5499be3325d8 17.10 landed
- 6cb307251c5c 18.4 landed
- 5941e7f09223 19 (unreleased) landed