From f2d907e6bb1ba372495eeaffe428480003497716 Mon Sep 17 00:00:00 2001 From: Alan Griffiths Date: Mon, 21 May 2018 14:18:38 +0100 Subject: [PATCH] Retry loop for resuming display --- src/server/display_server.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/server/display_server.cpp b/src/server/display_server.cpp index d2dcc5762f3..e6b7bc1f612 100644 --- a/src/server/display_server.cpp +++ b/src/server/display_server.cpp @@ -33,7 +33,11 @@ #include "mir/log.h" #include "mir/unwind_helpers.h" +#include + +#include #include +#include namespace mc = mir::compositor; namespace mf = mir::frontend; @@ -117,7 +121,24 @@ struct mir::DisplayServer::Private try { auto disp = try_but_revert_if_unwinding( - [this] { display->resume(); }, + [this] + { + auto const deadline = std::chrono::steady_clock::now() + std::chrono::milliseconds{500}; + + retry: + try + { + display->resume(); + } + catch(std::runtime_error const& e) + { + if (std::chrono::steady_clock::now() > deadline) + fatal_error(("Failed to resume display:\n" + boost::diagnostic_information(e)).c_str()); + + std::this_thread::sleep_for(std::chrono::milliseconds{50}); + goto retry; + } + }, [&, this] { display->pause(); }); auto comp = try_but_revert_if_unwinding(