Index: dbus/bus.cc |
diff --git a/dbus/bus.cc b/dbus/bus.cc |
index 1c258d20b19b8949c58178f77253962b3ff74c27..cb7f145c5a75fa7c3d45015177faae93fb21b661 100644 |
--- a/dbus/bus.cc |
+++ b/dbus/bus.cc |
@@ -189,7 +189,8 @@ Bus::Bus(const Options& options) |
shutdown_completed_(false), |
num_pending_watches_(0), |
num_pending_timeouts_(0), |
- address_(options.address) { |
+ address_(options.address), |
+ on_disconnected_closure_(options.disconnected_callback) { |
// This is safe to call multiple times. |
dbus_threads_init_default(); |
// The origin message loop is unnecessary if the client uses synchronous |
@@ -373,6 +374,14 @@ bool Bus::Connect() { |
return true; |
} |
+void Bus::CloseConnection() { |
+ // dbus_connection_close is blocking call. |
+ AssertOnDBusThread(); |
+ |
+ if (connection_type_ == PRIVATE) |
satorux1
2013/02/15 03:55:20
why do we need to check the type?
Seigo Nonaka
2013/02/15 04:18:36
Because dbus_connection_close is only for private
satorux1
2013/02/15 04:25:11
Then let's rename this function to ClosePrivateCon
Seigo Nonaka
2013/02/15 04:36:10
Done.
|
+ dbus_connection_close(connection_); |
+} |
+ |
void Bus::ShutdownAndBlock() { |
AssertOnDBusThread(); |
@@ -871,6 +880,9 @@ void Bus::OnDispatchStatusChanged(DBusConnection* connection, |
void Bus::OnConnectionDisconnected(DBusConnection* connection) { |
AssertOnDBusThread(); |
+ if (!on_disconnected_closure_.is_null()) |
+ PostTaskToOriginThread(FROM_HERE, on_disconnected_closure_); |
+ |
if (!connection) |
return; |
DCHECK(!dbus_connection_get_is_connected(connection)); |