Index: dbus/object_manager.cc |
diff --git a/dbus/object_manager.cc b/dbus/object_manager.cc |
index 56143c758b4bb9b40f72e0f55075e0caa1f77ddc..471db8fe72f5d7c2e72114ed05d3599460432363 100644 |
--- a/dbus/object_manager.cc |
+++ b/dbus/object_manager.cc |
@@ -167,35 +167,6 @@ void ObjectManager::CleanUp() { |
match_rule_.clear(); |
} |
-void ObjectManager::InitializeObjects() { |
- DCHECK(bus_); |
- DCHECK(object_proxy_); |
- DCHECK(setup_success_); |
- |
- // |object_proxy_| is no longer valid if the Bus was shut down before this |
- // call. Don't initiate any other action from the origin thread. |
- if (cleanup_called_) |
- return; |
- |
- object_proxy_->ConnectToSignal( |
- kObjectManagerInterface, |
- kObjectManagerInterfacesAdded, |
- base::Bind(&ObjectManager::InterfacesAddedReceived, |
- weak_ptr_factory_.GetWeakPtr()), |
- base::Bind(&ObjectManager::InterfacesAddedConnected, |
- weak_ptr_factory_.GetWeakPtr())); |
- |
- object_proxy_->ConnectToSignal( |
- kObjectManagerInterface, |
- kObjectManagerInterfacesRemoved, |
- base::Bind(&ObjectManager::InterfacesRemovedReceived, |
- weak_ptr_factory_.GetWeakPtr()), |
- base::Bind(&ObjectManager::InterfacesRemovedConnected, |
- weak_ptr_factory_.GetWeakPtr())); |
- |
- GetManagedObjects(); |
-} |
- |
bool ObjectManager::SetupMatchRuleAndFilter() { |
DCHECK(bus_); |
DCHECK(!setup_success_); |
@@ -235,10 +206,49 @@ bool ObjectManager::SetupMatchRuleAndFilter() { |
} |
void ObjectManager::OnSetupMatchRuleAndFilterComplete(bool success) { |
- LOG_IF(WARNING, !success) << service_name_ << " " << object_path_.value() |
- << ": Failed to set up match rule."; |
- if (success) |
- InitializeObjects(); |
+ if (!success) { |
+ LOG(WARNING) << service_name_ << " " << object_path_.value() |
+ << ": Failed to set up match rule."; |
+ return; |
+ } |
+ |
+ DCHECK(bus_); |
+ DCHECK(object_proxy_); |
+ DCHECK(setup_success_); |
+ |
+ // |object_proxy_| is no longer valid if the Bus was shut down before this |
+ // call. Don't initiate any other action from the origin thread. |
+ if (cleanup_called_) |
+ return; |
+ |
+ object_proxy_->ConnectToSignal( |
+ kObjectManagerInterface, |
+ kObjectManagerInterfacesAdded, |
+ base::Bind(&ObjectManager::InterfacesAddedReceived, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&ObjectManager::InterfacesAddedConnected, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ object_proxy_->ConnectToSignal( |
+ kObjectManagerInterface, |
+ kObjectManagerInterfacesRemoved, |
+ base::Bind(&ObjectManager::InterfacesRemovedReceived, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&ObjectManager::InterfacesRemovedConnected, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ object_proxy_->WaitForServiceToBeAvailable( |
+ base::Bind(&ObjectManager::OnServiceInitiallyAvailable, |
+ weak_ptr_factory_.GetWeakPtr())); |
hashimoto
2016/09/02 08:33:06
You can just do this here:
if (!service_name_owne
Daniel Erat
2016/09/02 14:39:27
thanks, i hadn't seen the earlier call to GetServi
|
+} |
+ |
+void ObjectManager::OnServiceInitiallyAvailable(bool service_is_available) { |
+ if (!service_is_available) { |
+ LOG(WARNING) << service_name_ << " " << object_path_.value() |
+ << ": Failed to wait for service to become available"; |
+ return; |
+ } |
+ GetManagedObjects(); |
} |
// static |