Most recent failure [on master](https://cirrus-ci.com/task/6073953614561280) (https://github.com/bitcoin/bitcoin/commit/567670bec5ecf9bc252e91370382be53fd81ccee):
```bash
 test  2021-06-23T11:18:18.969000Z TestFramework.node0 (DEBUG): Node stopped 
 test  2021-06-23T11:18:18.969000Z TestFramework.bitcoincli (DEBUG): Running bitcoin-cli ['-rpcwait', '-rpcwaittimeout=5', 'echo'] 
 test  2021-06-23T11:18:23.001000Z TestFramework (ERROR): Assertion failed 
                                   Traceback (most recent call last):
                                     File "/tmp/cirrus-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/test_framework/test_framework.py", line 128, in main
                                       self.run_test()
                                     File "/tmp/cirrus-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/interface_bitcoin_cli.py", line 257, in run_test
                                       assert_greater_than_or_equal(time.time(), start_time + 5)
                                     File "/tmp/cirrus-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/test_framework/util.py", line 61, in assert_greater_than_or_equal
                                       raise AssertionError("%s < %s" % (str(thing1), str(thing2)))
                                   AssertionError: 1624447103.0015192 < 1624447103.969648
 test  2021-06-23T11:18:23.004000Z TestFramework (DEBUG): Closing down network thread 
 test  2021-06-23T11:18:23.055000Z TestFramework (INFO): Stopping nodes 
```
{
    UniValue response(UniValue::VOBJ);
    
    const bool fWait = gArgs.GetBoolArg("-rpcwait", false);
    const int timeout = gArgs.GetArg("-rpcwaittimeout", DEFAULT_WAIT_CLIENT_TIMEOUT);
    const int64_t deadline = GetTime<std::chrono::seconds>().count() + timeout;
    do {
        try {
            response = CallRPC(rh, strMethod, args, rpcwallet);
            if (fWait) {
                const UniValue& error = find_value(response, "error");
                if (!error.isNull() && error["code"].get_int() == RPC_IN_WARMUP) {
                    throw CConnectionFailed("server in warmup");
                }
            }
            break; 
        } catch (const CConnectionFailed& e) {
            const int64_t now = GetTime<std::chrono::seconds>().count();
            if (fWait && (timeout <= 0 || now < deadline)) {
                UninterruptibleSleep(std::chrono::seconds{1});
            } else {
                throw CConnectionFailed(strprintf("timeout on transient error: %s", e.what()));
            }
        }
    } while (fWait);
    return response;
}
static void ParseResult(const UniValue& result, std::string& strPrint)