defaultServiceManager locks before check.

A 64-bit write may not be atomic (may not be contain in one instruction),
hence the read without the lock may be unsafe in very rare cases.

Test: pass
Test: boots
Change-Id: I8abc011c1ca039671a184afab84cf1174f38e2a8
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);
+            }
         }
     }