dbus_connection.cc 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //
  2. // Copyright (C) 2016 The Android Open Source Project
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. #include "update_engine/dbus_connection.h"
  17. #include <base/time/time.h>
  18. namespace chromeos_update_engine {
  19. namespace {
  20. const int kDBusSystemMaxWaitSeconds = 2 * 60;
  21. DBusConnection* dbus_connection_singleton = nullptr;
  22. } // namespace
  23. DBusConnection::DBusConnection() {
  24. // We wait for the D-Bus connection for up two minutes to avoid re-spawning
  25. // the daemon too fast causing thrashing if dbus-daemon is not running.
  26. bus_ = dbus_connection_.ConnectWithTimeout(
  27. base::TimeDelta::FromSeconds(kDBusSystemMaxWaitSeconds));
  28. if (!bus_) {
  29. // TODO(deymo): Make it possible to run update_engine even if dbus-daemon
  30. // is not running or constantly crashing.
  31. LOG(FATAL) << "Failed to initialize DBus, aborting.";
  32. }
  33. CHECK(bus_->SetUpAsyncOperations());
  34. }
  35. const scoped_refptr<dbus::Bus>& DBusConnection::GetDBus() {
  36. CHECK(bus_);
  37. return bus_;
  38. }
  39. DBusConnection* DBusConnection::Get() {
  40. if (!dbus_connection_singleton)
  41. dbus_connection_singleton = new DBusConnection();
  42. return dbus_connection_singleton;
  43. }
  44. } // namespace chromeos_update_engine