82f80ef8

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

Let a worker put a result a failed resource already put

A resource that fails before its tests gives them results, because the
thread collecting them waits on every one.  Scheduling can stop part-way
through a group, though, and the jobs already on the queue still run, so
a worker could reach a var that had been filled on its behalf and block
on it.  That is a worker counted as working forever, which is the hang
this mechanism exists to avoid.

tryPutMVar, and the result already there wins: it says the resource this
test needed failed, which is more use than what the test made of a
resource it did not have.

No regression test: the window is between a job being queued and a
worker reaching it, and I could not close on it deterministically
without adding hooks to the runner.
GitHub
configurex86_64-linux