From 6794a9f9a194e24862e60a918eac031b7641686c Mon Sep 17 00:00:00 2001 From: Stephen Frost Date: Fri, 24 Jan 2014 15:10:08 -0500 Subject: [PATCH] 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. --- src/bin/pg_dump/parallel.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c index d252f9b789..6f2634bb64 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