You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.5 KiB
80 lines
2.5 KiB
4 months ago
|
//
|
||
|
// Copyright (C) 2015 The Android Open Source Project
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
//
|
||
|
|
||
|
#include "update_engine/cros/daemon_chromeos.h"
|
||
|
|
||
|
#include <sysexits.h>
|
||
|
|
||
|
#include <base/bind.h>
|
||
|
#include <base/location.h>
|
||
|
|
||
|
#include "update_engine/cros/real_system_state.h"
|
||
|
|
||
|
using brillo::Daemon;
|
||
|
using std::unique_ptr;
|
||
|
|
||
|
namespace chromeos_update_engine {
|
||
|
|
||
|
unique_ptr<DaemonBase> DaemonBase::CreateInstance() {
|
||
|
return std::make_unique<DaemonChromeOS>();
|
||
|
}
|
||
|
|
||
|
int DaemonChromeOS::OnInit() {
|
||
|
// Register the |subprocess_| singleton with this Daemon as the signal
|
||
|
// handler.
|
||
|
subprocess_.Init(this);
|
||
|
|
||
|
int exit_code = Daemon::OnInit();
|
||
|
if (exit_code != EX_OK)
|
||
|
return exit_code;
|
||
|
|
||
|
// Initialize update engine global state.
|
||
|
// TODO(deymo): Move the initialization to a factory method avoiding the
|
||
|
// explicit re-usage of the |bus| instance, shared between D-Bus service and
|
||
|
// D-Bus client calls.
|
||
|
RealSystemState::SetInstance(&system_state_);
|
||
|
|
||
|
// Create the DBus service.
|
||
|
dbus_adaptor_.reset(new UpdateEngineAdaptor());
|
||
|
SystemState::Get()->update_attempter()->AddObserver(dbus_adaptor_.get());
|
||
|
|
||
|
dbus_adaptor_->RegisterAsync(
|
||
|
base::Bind(&DaemonChromeOS::OnDBusRegistered, base::Unretained(this)));
|
||
|
LOG(INFO) << "Waiting for DBus object to be registered.";
|
||
|
return EX_OK;
|
||
|
}
|
||
|
|
||
|
void DaemonChromeOS::OnDBusRegistered(bool succeeded) {
|
||
|
if (!succeeded) {
|
||
|
LOG(ERROR) << "Registering the UpdateEngineAdaptor";
|
||
|
QuitWithExitCode(1);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Take ownership of the service now that everything is initialized. We need
|
||
|
// to this now and not before to avoid exposing a well known DBus service
|
||
|
// path that doesn't have the service it is supposed to implement.
|
||
|
if (!dbus_adaptor_->RequestOwnership()) {
|
||
|
LOG(ERROR) << "Unable to take ownership of the DBus service, is there "
|
||
|
<< "other update_engine daemon running?";
|
||
|
QuitWithExitCode(1);
|
||
|
return;
|
||
|
}
|
||
|
SystemState::Get()->update_attempter()->StartUpdater();
|
||
|
}
|
||
|
|
||
|
} // namespace chromeos_update_engine
|