aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStephen Frost <sfrost@snowman.net>2014-01-24 15:10:08 -0500
committerStephen Frost <sfrost@snowman.net>2014-01-24 15:12:54 -0500
commit8cb90b21af3cc52c21d8a43e2d9f125113ad9f4f (patch)
treea4c976d644119836b3d897643f957d0302d93b0c /src
parentbe5d4997437d185b1b7ca6e53a6e433810aee4f0 (diff)
downloadpostgresql-8cb90b21af3cc52c21d8a43e2d9f125113ad9f4f.tar.gz
postgresql-8cb90b21af3cc52c21d8a43e2d9f125113ad9f4f.zip
Avoid minor leak in parallel pg_dump
During parallel pg_dump, a worker process closing the connection caused a minor memory leak (particularly minor as we are likely about to exit anyway). Instead, free the memory in this case prior to returning NULL to indicate connection closed. Spotting by the Coverity scanner. Back patch to 9.3 where this was introduced.
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/parallel.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c
index 7208b0fec23..ff777d2b4f4 100644
--- a/src/bin/pg_dump/parallel.c
+++ b/src/bin/pg_dump/parallel.c
@@ -1288,7 +1288,7 @@ readMessageFromPipe(int fd)
/* worker has closed the connection or another error happened */
if (ret <= 0)
- return NULL;
+ break;
Assert(ret == 1);
@@ -1303,6 +1303,14 @@ readMessageFromPipe(int fd)
msg = (char *) realloc(msg, bufsize);
}
}
+
+ /*
+ * Worker has closed the connection, make sure to clean up before return
+ * since we are not returning msg (but did allocate it).
+ */
+ free(msg);
+
+ return NULL;
}
#ifdef WIN32