client: GetProxy: add retries

Because in some cases, esp on very loaded systems, the updater may be
temporarily unresponsive, add retry logic when trying to connect over
dbus.

BUG=chromium-os:18717
TEST=tested on device

Change-Id: I277e843ae1ded174a7768c63093e095c29143dcb
Reviewed-on: http://gerrit.chromium.org/gerrit/5614
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Andrew de los Reyes <adlr@chromium.org>
diff --git a/update_engine_client.cc b/update_engine_client.cc
index c0b61fe..1514561 100644
--- a/update_engine_client.cc
+++ b/update_engine_client.cc
@@ -38,18 +38,22 @@
 
 bool GetProxy(DBusGProxy** out_proxy) {
   DBusGConnection* bus;
-  DBusGProxy* proxy;
+  DBusGProxy* proxy = NULL;
   GError* error = NULL;
+  const int kTries = 4;
 
   bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
   if (!bus) {
     LOG(FATAL) << "Failed to get bus";
   }
-  proxy = dbus_g_proxy_new_for_name_owner(bus,
-                                          kUpdateEngineServiceName,
-                                          kUpdateEngineServicePath,
-                                          kUpdateEngineServiceInterface,
-                                          &error);
+  for (int i = 0; !proxy && i < kTries; ++i) {
+    LOG(INFO) << "Trying to get dbus proxy. Try " << (i + 1) << "/" << kTries;
+    proxy = dbus_g_proxy_new_for_name_owner(bus,
+                                            kUpdateEngineServiceName,
+                                            kUpdateEngineServicePath,
+                                            kUpdateEngineServiceInterface,
+                                            &error);
+  }
   if (!proxy) {
     LOG(FATAL) << "Error getting dbus proxy for "
                << kUpdateEngineServiceName << ": " << GetGErrorMessage(error);