1299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// 2299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// Copyright (C) 2016 The Android Open Source Project 3299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// 4299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// Licensed under the Apache License, Version 2.0 (the "License"); 5299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// you may not use this file except in compliance with the License. 6299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// You may obtain a copy of the License at 7299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// 8299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// http://www.apache.org/licenses/LICENSE-2.0 9299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// 10299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// Unless required by applicable law or agreed to in writing, software 11299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// distributed under the License is distributed on an "AS IS" BASIS, 12299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// See the License for the specific language governing permissions and 14299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// limitations under the License. 15299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang// 16299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 17299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang#include "update_engine/dbus_connection.h" 18299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 19299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang#include <base/time/time.h> 20299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 21299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiangnamespace chromeos_update_engine { 22299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 23299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiangnamespace { 24299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiangconst int kDBusSystemMaxWaitSeconds = 2 * 60; 25299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 26299128ee0f9009f79a62d5f57d75270f62353c9dSen JiangDBusConnection* dbus_connection_singleton = nullptr; 27299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang} // namespace 28299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 29299128ee0f9009f79a62d5f57d75270f62353c9dSen JiangDBusConnection::DBusConnection() { 30299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang // We wait for the D-Bus connection for up two minutes to avoid re-spawning 31299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang // the daemon too fast causing thrashing if dbus-daemon is not running. 32299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang bus_ = dbus_connection_.ConnectWithTimeout( 33299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang base::TimeDelta::FromSeconds(kDBusSystemMaxWaitSeconds)); 34299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 35299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang if (!bus_) { 36299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang // TODO(deymo): Make it possible to run update_engine even if dbus-daemon 37299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang // is not running or constantly crashing. 38299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang LOG(FATAL) << "Failed to initialize DBus, aborting."; 39299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang } 40299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 41299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang CHECK(bus_->SetUpAsyncOperations()); 42299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang} 43299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 44299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiangconst scoped_refptr<dbus::Bus>& DBusConnection::GetDBus() { 45299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang CHECK(bus_); 46299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang return bus_; 47299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang} 48299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 49299128ee0f9009f79a62d5f57d75270f62353c9dSen JiangDBusConnection* DBusConnection::Get() { 50299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang if (!dbus_connection_singleton) 51299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang dbus_connection_singleton = new DBusConnection(); 52299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang return dbus_connection_singleton; 53299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang} 54299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang 55299128ee0f9009f79a62d5f57d75270f62353c9dSen Jiang} // namespace chromeos_update_engine 56