Cygwin: sigproc: Eliminate redundant copying of chld_procs

On PROC_EXEC_CLEANUP, the pinfo's in chld_procs are removed.
This is done in a loop always removing the child with index 0.
This, however, results in copying the last child's pinfo in
chld_procs to position 0.  Do this for 100 children and you
get 99 entirely useless copy operations.

Fix this by calling remove_proc in reverse order.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2020-08-28 19:34:52 +02:00
parent c6b45af544
commit b05b0b78fa
1 changed files with 3 additions and 1 deletions

View File

@ -299,8 +299,10 @@ proc_subproc (DWORD what, uintptr_t val)
goto scan_wait;
case PROC_EXEC_CLEANUP:
/* Cleanup backwards to eliminate redundant copying of chld_procs
array members inside remove_proc. */
while (chld_procs.count ())
remove_proc (0);
remove_proc (chld_procs.count () - 1);
for (w = &waitq_head; w->next != NULL; w = w->next)
CloseHandle (w->next->ev);
break;