aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Frost <sfrost@snowman.net>2013-07-14 17:25:47 -0400
committerStephen Frost <sfrost@snowman.net>2013-07-14 17:25:47 -0400
commitb68a1fc7ff1a50a7282e8edff7c51333274c3334 (patch)
treee044c013eb32f0bb43c9e249d20da7d108d4710b
parente9010b992640d1dbf212cbbab40a00093515f16f (diff)
downloadpostgresql-b68a1fc7ff1a50a7282e8edff7c51333274c3334.tar.gz
postgresql-b68a1fc7ff1a50a7282e8edff7c51333274c3334.zip
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.
-rw-r--r--src/bin/pg_basebackup/receivelog.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index 7ce81125bfe..d56a4d71ea2 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;