blob: 46efa9abf5a81a36a50403ed59ee96c64f33f556 [file] [log] [blame] [edit]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/sys/appmgr/lifecycle.h"
#include <lib/fidl-async/cpp/bind.h>
#include "src/sys/appmgr/appmgr.h"
namespace component {
zx_status_t LifecycleServer::Create(async_dispatcher_t* dispatcher, zx::channel channel) {
auto result = fidl::BindServer(dispatcher, std::move(channel), this);
if (result.is_error()) {
zx_status_t status = result.take_error();
FX_PLOGS(ERROR, status) << "Failed to connect to Lifecycle Service.";
return status;
}
lifecycle_ = result.take_value();
return ZX_OK;
}
void LifecycleServer::Close(zx_status_t status) {
FX_LOGS(INFO) << "Closing appmgr lifecycle channel.";
if (lifecycle_) {
lifecycle_->Close(status);
} else {
FX_LOGS(ERROR) << "Appmgr lifecycle not bound.";
}
}
void LifecycleServer::Stop(StopCompleter::Sync& completer) {
FX_LOGS(INFO) << "appmgr: received shutdown command over lifecycle interface";
child_lifecycles_ = appmgr_->Shutdown([this](zx_status_t status) mutable {
FX_LOGS(INFO) << "Lifecycle Server complete callback";
child_lifecycles_.clear();
Close(status);
stop_callback_(status);
});
}
} // namespace component