> Replace the 200ms polling loop with a faster and more efficient waiting
> operation. This should speed up short RPC tests.
>
> This was tried a few times before, but given up every time because
> solutions use a condition variable which is not safe for use in signals
> as they need to be reentrant.
>
> On UNIX-ish OSes, use a safe way: a pipe. When shutdown is requested
> write a dummy byte to the pipe. Waiting for shutdown is a matter of a
> blocking read from the pipe.
>
> On Windows, there are no signals so using a condition variable is safe.
This is a backport of core#20605