From 15803e186865217689bbc8a15e611f78b033abc4 Mon Sep 17 00:00:00 2001 From: Han Pengfei Date: Thu, 1 Feb 2018 15:00:23 +0800 Subject: [PATCH] Just waiting 3 seconds when stop container. If container manager dies before session manager dying, the session manager cannot exit if it waits for all. This patch fix the above issue. Signed-off-by: Han Pengfei --- src/anbox/container/management_api_stub.cpp | 7 ++++++- src/anbox/container/management_api_stub.h | 1 + src/anbox/qemu/adb_message_processor.cpp | 5 ++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/anbox/container/management_api_stub.cpp b/src/anbox/container/management_api_stub.cpp index 1806daf..ebe7632 100644 --- a/src/anbox/container/management_api_stub.cpp +++ b/src/anbox/container/management_api_stub.cpp @@ -24,6 +24,9 @@ namespace anbox { namespace container { + +const std::chrono::milliseconds ManagementApiStub::stop_waiting_timeout{3000}; + ManagementApiStub::ManagementApiStub( const std::shared_ptr &channel) : channel_(channel) {} @@ -75,7 +78,9 @@ void ManagementApiStub::stop_container() { channel_->call_method("stop_container", &message, c->response.get(), google::protobuf::NewCallback(this, &ManagementApiStub::container_stopped, c.get())); - c->wh.wait_for_all(); + // If container manager dies before session manager, the session manager + // cannot exit if it waits for all, so just wait for 3 seconds. + c->wh.wait_for_pending(stop_waiting_timeout); if (c->response->has_error()) throw std::runtime_error(c->response->error()); } diff --git a/src/anbox/container/management_api_stub.h b/src/anbox/container/management_api_stub.h index 11ebeeb..e40df94 100644 --- a/src/anbox/container/management_api_stub.h +++ b/src/anbox/container/management_api_stub.h @@ -56,6 +56,7 @@ class ManagementApiStub : public DoNotCopyOrMove { mutable std::mutex mutex_; std::shared_ptr channel_; + static const std::chrono::milliseconds stop_waiting_timeout; }; } // namespace container } // namespace anbox diff --git a/src/anbox/qemu/adb_message_processor.cpp b/src/anbox/qemu/adb_message_processor.cpp index 5652be1..0387088 100644 --- a/src/anbox/qemu/adb_message_processor.cpp +++ b/src/anbox/qemu/adb_message_processor.cpp @@ -72,11 +72,10 @@ void AdbMessageProcessor::advance_state() { // one is established but will not use it until the active one is closed. lock_.lock(); - if (state_ == closed_by_host) { + if (state_ == closed_by_host) host_connector_.reset(); - } else { + else wait_for_host_connection(); - } lock_.unlock(); break;