summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian2010-09-28 19:25:12 +0000
committerBruce Momjian2010-09-28 19:28:34 +0000
commitf175884520949fbc52908d2f4b2baacde5906ebc (patch)
tree632fa0087255709e578e4894c926b95890fb5d1a
parent112c3fc6db62b39ded8965eddce1f4213308b957 (diff)
Properly close files after read file failure to prevent potential
resource leak. Of course, any such failure aborts pg_upgrade, but might as well be clean about it. Per patch from Grzegorz Ja?kiewicz.
-rw-r--r--contrib/pg_upgrade/file.c3
-rw-r--r--contrib/pg_upgrade/page.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/contrib/pg_upgrade/file.c b/contrib/pg_upgrade/file.c
index 11f1d4bbcb..473b029d0a 100644
--- a/contrib/pg_upgrade/file.c
+++ b/contrib/pg_upgrade/file.c
@@ -74,7 +74,10 @@ copyAndUpdateFile(migratorContext *ctx, pageCnvCtx *pageConverter,
return "can't open source file";
if ((dstfd = open(dst, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR)) < 0)
+ {
+ fclose(src_fd);
return "can't create destination file";
+ }
while ((bytesRead = read(src_fd, buf, BLCKSZ)) == BLCKSZ)
{
diff --git a/contrib/pg_upgrade/page.c b/contrib/pg_upgrade/page.c
index e732e22bbc..cc0ef54a8a 100644
--- a/contrib/pg_upgrade/page.c
+++ b/contrib/pg_upgrade/page.c
@@ -103,7 +103,10 @@ getPageVersion(migratorContext *ctx, uint16 *version, const char *pathName)
return "can't open relation";
if ((bytesRead = read(relfd, &page, sizeof(page))) != sizeof(page))
+ {
+ close(relfd);
return "can't read page header";
+ }
*version = PageGetPageLayoutVersion(&page);