diff options
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r-- | winsup/cygwin/syscalls.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index de8cf119c..9edacd520 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -4355,8 +4355,17 @@ popen (const char *command, const char *in_type) /* If we reach here we've seen an error but the pipe handles are open. Close them and return NULL. */ int save_errno = get_errno (); - close (fds[0]); - close (fds[1]); + if (fp) + { + /* Must fclose fp to avoid memory leak. */ + fclose (fp); + close (fds[myix ^ 1]); + } + else + { + close (fds[0]); + close (fds[1]); + } set_errno (save_errno); #undef rw |