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);
+ }
}
}