defaultServiceManager locks before check.
am: 8fb656b8ad

Change-Id: I2df7177c0d30224d034da8099671e505503aff0f
diff --git a/transport/ServiceManagement.cpp b/transport/ServiceManagement.cpp
index 15abb92..feef01f 100644
--- a/transport/ServiceManagement.cpp
+++ b/transport/ServiceManagement.cpp
@@ -53,19 +53,23 @@
 
 sp<IServiceManager> defaultServiceManager() {
 
-    if (gDefaultServiceManager != NULL) return gDefaultServiceManager;
-    if (access("/dev/hwbinder", F_OK|R_OK|W_OK) != 0) {
-        // HwBinder not available on this device or not accessible to
-        // this process.
-        return nullptr;
-    }
     {
         AutoMutex _l(gDefaultServiceManagerLock);
+        if (gDefaultServiceManager != NULL) {
+            return gDefaultServiceManager;
+        }
+        if (access("/dev/hwbinder", F_OK|R_OK|W_OK) != 0) {
+            // HwBinder not available on this device or not accessible to
+            // this process.
+            return nullptr;
+        }
         while (gDefaultServiceManager == NULL) {
-            gDefaultServiceManager = fromBinder<IServiceManager, BpHwServiceManager, BnHwServiceManager>(
-                ProcessState::self()->getContextObject(NULL));
-            if (gDefaultServiceManager == NULL)
+            gDefaultServiceManager =
+                    fromBinder<IServiceManager, BpHwServiceManager, BnHwServiceManager>(
+                        ProcessState::self()->getContextObject(NULL));
+            if (gDefaultServiceManager == NULL) {
                 sleep(1);
+            }
         }
     }