diff options
Diffstat (limited to 'bbot/agent/machine.cxx')
-rw-r--r-- | bbot/agent/machine.cxx | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/bbot/agent/machine.cxx b/bbot/agent/machine.cxx index 69ef3c7..fdc11c0 100644 --- a/bbot/agent/machine.cxx +++ b/bbot/agent/machine.cxx @@ -378,8 +378,16 @@ namespace bbot } catch (const system_error& e) { - size_t t (0); - if (wait (t)) + // There is a window between QEMU closing the monitor socket and exiting + // so we wait but only briefly. + // + size_t t (seconds > 0 ? 1 : 0); + + seconds -= t; + bool r (wait (t)); + seconds += t; + + if (r) return true; fail << "unable to communicate with qemu monitor: " << e; @@ -391,13 +399,15 @@ namespace bbot void kvm_machine:: forcedown (bool fh) { + // Similar logic to shutdown(). + // try { monitor_command ("system_reset"); } catch (const system_error& e) { - size_t t (0); + size_t t (1); if (wait (t, fh)) return; @@ -450,7 +460,7 @@ namespace bbot } catch (const process_error& e) { - fail (fh) << "unable to execute " << kvm << ": " << e << endf; + fail (fh) << "unable to wait for " << kvm << ": " << e << endf; } } |