From cec62efd0e551a56635b47ea4185ec27a6840de7 Mon Sep 17 00:00:00 2001 From: Stephen Frost Date: Sun, 14 Jul 2013 17:30:43 -0400 Subject: [PATCH] Be sure to close() file descriptor on error case In receivelog.c:writeTimeLineHistoryFile(), we were not properly closing the open'd file descriptor in error cases. While this wouldn't matter much if we were about to exit due to such an error, that's not the case with pg_receivexlog as it can be a long-running process and these errors are non-fatal. This resource leak was found by the Coverity scanner. Back-patch to 9.3 where this issue first appeared. --- src/bin/pg_basebackup/receivelog.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c index 7ce81125bf..d56a4d71ea 100644 --- a/src/bin/pg_basebackup/receivelog.c +++ b/src/bin/pg_basebackup/receivelog.c @@ -329,6 +329,7 @@ writeTimeLineHistoryFile(char *basedir, TimeLineID tli, char *filename, char *co /* * If we fail to make the file, delete it to release disk space */ + close(fd); unlink(tmppath); errno = save_errno; @@ -339,6 +340,7 @@ writeTimeLineHistoryFile(char *basedir, TimeLineID tli, char *filename, char *co if (fsync(fd) != 0) { + close(fd); fprintf(stderr, _("%s: could not fsync file \"%s\": %s\n"), progname, tmppath, strerror(errno)); return false;