summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2013-02-18 18:38:50 +0200
committerEli Zaretskii <eliz@gnu.org>2013-02-18 18:38:50 +0200
commit17ddfd150ff1d84021342ee82ff53b5860579252 (patch)
treedf45d278191f113d9e8cea464d91778ab7ba7b2b
parentc1b9b2c27fafbb7e20ba5628771e8f75c3bfd32b (diff)
downloademacs-17ddfd150ff1d84021342ee82ff53b5860579252.tar.gz
Avoid leaking handles on MS-Windows.
src/w32proc.c (new_child): Avoid leaking handles if the subprocess resources were not orderly released.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/w32proc.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 4325d35adee..99b5e8734e9 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2013-02-18 Eli Zaretskii <eliz@gnu.org>
+
+ * w32proc.c (new_child): Avoid leaking handles if the subprocess
+ resources were not orderly released.
+
2013-02-17 Eli Zaretskii <eliz@gnu.org>
* w32proc.c (new_child): Remove the loop that attempted to salvage
diff --git a/src/w32proc.c b/src/w32proc.c
index 3b4522bf16b..da4549bd7df 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -802,6 +802,12 @@ new_child (void)
cp = &child_procs[child_proc_count++];
Initialize:
+ /* Last opportunity to avoid leaking handles before we forget them
+ for good. */
+ if (cp->procinfo.hProcess)
+ CloseHandle (cp->procinfo.hProcess);
+ if (cp->procinfo.hThread)
+ CloseHandle (cp->procinfo.hThread);
memset (cp, 0, sizeof (*cp));
cp->fd = -1;
cp->pid = -1;