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; goto scan_wait;
case PROC_EXEC_CLEANUP: case PROC_EXEC_CLEANUP:
/* Cleanup backwards to eliminate redundant copying of chld_procs
array members inside remove_proc. */
while (chld_procs.count ()) while (chld_procs.count ())
remove_proc (0); remove_proc (chld_procs.count () - 1);
for (w = &waitq_head; w->next != NULL; w = w->next) for (w = &waitq_head; w->next != NULL; w = w->next)
CloseHandle (w->next->ev); CloseHandle (w->next->ev);
break; break;