f65777c0

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

mutation: swallow ECHILD in stopProcess cleanup

waitExitCode reaps the child when it exits naturally, but bracket's
cleanup then runs stopProcess which also tries to waitForProcess on the
already-reaped pid and throws 'waitForProcess: does not exist (No child
processes)'. The exception propagates out of mapConcurrently and crashes
the whole harness after the first naturally-exiting mutation child.

Swallow that specific cleanup-time IOException. The bracket is there to
guarantee SIGTERM on the timeout-wins branch and on async exceptions;
when the child has already exited, there is nothing left to clean up.

Suite timing

Time to Start Worker time Duration Time to finish
Config 0s 2s 2s 2s
Eval 2s 38s 38s 41s
Build 6s 2h05m09s 55m09s 55m15s
Test - - - -
Deploy - - - -
Suite 0s 2h05m51s 55m15s 55m15s

Timeline

0s1m2m3m4m5m6m7m8m9m10m11m12m13m14m15m16m17m18m19m20m21m22m23m24m25m26m27m28m29m30m31m32m33m34m35m36m37m38m39m40m41m42m43m44m45m46m47m48m49m50m51m52m53m54m55m