mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-02 08:22:22 +00:00
Possibly fix bug #13086 with losing track of subprocesses on MS-Windows.
src/w32proc.c (new_child, delete_child, find_child_pid): For a subprocess, consider its slot being in use as long as its process handle (procinfo.hProcess) is not NULL. This avoids reusing the slot when a new process is started immediately after killing another one, without waiting enough time for the first process to be reaped and resources allocated for it be orderly freed. Suggested by Fabrice Popineau <fabrice.popineau@supelec.fr>.
This commit is contained in:
parent
c1f02afadf
commit
7efa3fb357
@ -1,3 +1,14 @@
|
||||
2012-12-21 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* w32proc.c (new_child, delete_child, find_child_pid): For a
|
||||
subprocess, consider its slot being in use as long as its process
|
||||
handle (procinfo.hProcess) is not NULL. This avoids reusing the
|
||||
slot when a new process is started immediately after killing
|
||||
another one, without waiting enough time for the first process to
|
||||
be reaped and resources allocated for it be orderly freed.
|
||||
(Bug#13086)
|
||||
Suggested by Fabrice Popineau <fabrice.popineau@supelec.fr>.
|
||||
|
||||
2012-12-21 Chong Yidong <cyd@gnu.org>
|
||||
|
||||
* buffer.c (Fset_buffer_major_mode): Doc fix (Bug#13231).
|
||||
|
@ -795,7 +795,7 @@ new_child (void)
|
||||
DWORD id;
|
||||
|
||||
for (cp = child_procs + (child_proc_count-1); cp >= child_procs; cp--)
|
||||
if (!CHILD_ACTIVE (cp))
|
||||
if (!CHILD_ACTIVE (cp) && cp->procinfo.hProcess == NULL)
|
||||
goto Initialize;
|
||||
if (child_proc_count == MAX_CHILDREN)
|
||||
return NULL;
|
||||
@ -852,7 +852,7 @@ delete_child (child_process *cp)
|
||||
if (fd_info[i].cp == cp)
|
||||
emacs_abort ();
|
||||
|
||||
if (!CHILD_ACTIVE (cp))
|
||||
if (!CHILD_ACTIVE (cp) && cp->procinfo.hProcess == NULL)
|
||||
return;
|
||||
|
||||
/* reap thread if necessary */
|
||||
@ -896,7 +896,8 @@ delete_child (child_process *cp)
|
||||
if (cp == child_procs + child_proc_count - 1)
|
||||
{
|
||||
for (i = child_proc_count-1; i >= 0; i--)
|
||||
if (CHILD_ACTIVE (&child_procs[i]))
|
||||
if (CHILD_ACTIVE (&child_procs[i])
|
||||
|| child_procs[i].procinfo.hProcess != NULL)
|
||||
{
|
||||
child_proc_count = i + 1;
|
||||
break;
|
||||
@ -913,7 +914,8 @@ find_child_pid (DWORD pid)
|
||||
child_process *cp;
|
||||
|
||||
for (cp = child_procs + (child_proc_count-1); cp >= child_procs; cp--)
|
||||
if (CHILD_ACTIVE (cp) && pid == cp->pid)
|
||||
if ((CHILD_ACTIVE (cp) || cp->procinfo.hProcess != NULL)
|
||||
&& pid == cp->pid)
|
||||
return cp;
|
||||
return NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user