aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deymo <deymo@google.com>2016-01-22 00:03:59 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-01-22 00:03:59 +0000
commit1ec5e940ed9a07360345b60cbc97ef7a9d2c246d (patch)
tree03b3f32aead9095c2b8e07997a947c57d72d90b2
parentc1c5cce8bcd08af219b61b25bd7baaf10c99677f (diff)
parent2a25190ea741023a3753e7f381a8a2b1465c43c1 (diff)
downloadplatform_external_libbrillo-1ec5e940ed9a07360345b60cbc97ef7a9d2c246d.tar.gz
platform_external_libbrillo-1ec5e940ed9a07360345b60cbc97ef7a9d2c246d.tar.bz2
platform_external_libbrillo-1ec5e940ed9a07360345b60cbc97ef7a9d2c246d.zip
Add DBusConnection helper class to use instead of DBusDaemon.
am: 2a25190ea7 * commit '2a25190ea741023a3753e7f381a8a2b1465c43c1': Add DBusConnection helper class to use instead of DBusDaemon.
-rw-r--r--Android.mk1
-rw-r--r--brillo/daemons/dbus_daemon.cc12
-rw-r--r--brillo/daemons/dbus_daemon.h7
-rw-r--r--brillo/dbus/dbus_connection.cc58
-rw-r--r--brillo/dbus/dbus_connection.h40
-rw-r--r--libbrillo.gypi1
6 files changed, 108 insertions, 11 deletions
diff --git a/Android.mk b/Android.mk
index d25d3fb..f10575c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -53,6 +53,7 @@ libbrillo_dbus_sources := \
brillo/daemons/dbus_daemon.cc \
brillo/dbus/async_event_sequencer.cc \
brillo/dbus/data_serialization.cc \
+ brillo/dbus/dbus_connection.cc \
brillo/dbus/dbus_method_invoker.cc \
brillo/dbus/dbus_method_response.cc \
brillo/dbus/dbus_object.cc \
diff --git a/brillo/daemons/dbus_daemon.cc b/brillo/daemons/dbus_daemon.cc
index 6e90686..a48b288 100644
--- a/brillo/daemons/dbus_daemon.cc
+++ b/brillo/daemons/dbus_daemon.cc
@@ -18,21 +18,13 @@ namespace brillo {
DBusDaemon::DBusDaemon() {
}
-DBusDaemon::~DBusDaemon() {
- if (bus_)
- bus_->ShutdownAndBlock();
-}
-
int DBusDaemon::OnInit() {
int exit_code = Daemon::OnInit();
if (exit_code != EX_OK)
return exit_code;
- dbus::Bus::Options options;
- options.bus_type = dbus::Bus::SYSTEM;
-
- bus_ = new dbus::Bus(options);
- CHECK(bus_->Connect());
+ bus_ = dbus_connection_.Connect();
+ CHECK(bus_);
return exit_code;
}
diff --git a/brillo/daemons/dbus_daemon.h b/brillo/daemons/dbus_daemon.h
index 67124e4..25ce306 100644
--- a/brillo/daemons/dbus_daemon.h
+++ b/brillo/daemons/dbus_daemon.h
@@ -12,6 +12,7 @@
#include <base/memory/ref_counted.h>
#include <brillo/brillo_export.h>
#include <brillo/daemons/daemon.h>
+#include <brillo/dbus/dbus_connection.h>
#include <brillo/dbus/exported_object_manager.h>
#include <dbus/bus.h>
@@ -27,16 +28,20 @@ class AsyncEventSequencer;
class BRILLO_EXPORT DBusDaemon : public Daemon {
public:
DBusDaemon();
- ~DBusDaemon() override;
+ ~DBusDaemon() override = default;
protected:
// Calls the base OnInit() and then instantiates dbus::Bus and establishes
// a D-Bus connection.
int OnInit() override;
+ // A reference to the |dbus_connection_| bus object often used by derived
+ // classes.
scoped_refptr<dbus::Bus> bus_;
private:
+ DBusConnection dbus_connection_;
+
DISALLOW_COPY_AND_ASSIGN(DBusDaemon);
};
diff --git a/brillo/dbus/dbus_connection.cc b/brillo/dbus/dbus_connection.cc
new file mode 100644
index 0000000..b60cf44
--- /dev/null
+++ b/brillo/dbus/dbus_connection.cc
@@ -0,0 +1,58 @@
+// Copyright 2016 The Chromium OS 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 <brillo/dbus/dbus_connection.h>
+
+#include <sysexits.h>
+
+#include <base/bind.h>
+#include <brillo/dbus/async_event_sequencer.h>
+#include <brillo/dbus/exported_object_manager.h>
+
+using brillo::dbus_utils::AsyncEventSequencer;
+using brillo::dbus_utils::ExportedObjectManager;
+
+namespace brillo {
+
+DBusConnection::DBusConnection() {
+}
+
+DBusConnection::~DBusConnection() {
+ if (bus_)
+ bus_->ShutdownAndBlock();
+}
+
+scoped_refptr<dbus::Bus> DBusConnection::Connect() {
+ return ConnectWithTimeout(base::TimeDelta());
+}
+
+scoped_refptr<dbus::Bus> DBusConnection::ConnectWithTimeout(
+ base::TimeDelta timeout) {
+ if (bus_)
+ return bus_;
+
+ base::TimeTicks deadline = base::TimeTicks::Now() + timeout;
+
+ dbus::Bus::Options options;
+ options.bus_type = dbus::Bus::SYSTEM;
+
+ scoped_refptr<dbus::Bus> bus = new dbus::Bus(options);
+
+ do {
+ if (bus->Connect()) {
+ bus_ = bus;
+ return bus_;
+ }
+ LOG(WARNING) << "Failed to get system bus.";
+ // Wait 1 second to prevent trashing the device while waiting for the
+ // dbus-daemon to start.
+ sleep(1);
+ } while (base::TimeTicks::Now() < deadline);
+
+ LOG(ERROR) << "Failed to get system bus after " << timeout.InSeconds()
+ << " seconds.";
+ return nullptr;
+}
+
+} // namespace brillo
diff --git a/brillo/dbus/dbus_connection.h b/brillo/dbus/dbus_connection.h
new file mode 100644
index 0000000..aecf434
--- /dev/null
+++ b/brillo/dbus/dbus_connection.h
@@ -0,0 +1,40 @@
+// Copyright 2016 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef LIBBRILLO_BRILLO_DBUS_DBUS_CONNECTION_H_
+#define LIBBRILLO_BRILLO_DBUS_DBUS_CONNECTION_H_
+
+#include <base/memory/ref_counted.h>
+#include <base/time/time.h>
+#include <dbus/bus.h>
+
+#include <brillo/brillo_export.h>
+
+namespace brillo {
+
+// DBusConnection adds D-Bus support to Daemon.
+class BRILLO_EXPORT DBusConnection final {
+ public:
+ DBusConnection();
+ ~DBusConnection();
+
+ // Instantiates dbus::Bus and establishes a D-Bus connection. Returns a
+ // reference to the connected bus, or an empty pointer in case of error.
+ scoped_refptr<dbus::Bus> Connect();
+
+ // Instantiates dbus::Bus and tries to establish a D-Bus connection for up to
+ // |timeout|. If the connection can't be established after the timeout, fails
+ // returning an empty pointer.
+ scoped_refptr<dbus::Bus> ConnectWithTimeout(base::TimeDelta timeout);
+
+ private:
+ scoped_refptr<dbus::Bus> bus_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(DBusConnection);
+};
+
+} // namespace brillo
+
+#endif // LIBBRILLO_BRILLO_DAEMONS_DBUS_DAEMON_H_
diff --git a/libbrillo.gypi b/libbrillo.gypi
index 6c317d7..f2d7882 100644
--- a/libbrillo.gypi
+++ b/libbrillo.gypi
@@ -61,6 +61,7 @@
'brillo/data_encoding.cc',
'brillo/dbus/async_event_sequencer.cc',
'brillo/dbus/data_serialization.cc',
+ 'brillo/dbus/dbus_connection.cc',
'brillo/dbus/dbus_method_invoker.cc',
'brillo/dbus/dbus_method_response.cc',
'brillo/dbus/dbus_object.cc',