diff options
author | 2019-04-02 15:46:24 -0700 | |
---|---|---|
committer | 2019-04-02 15:49:40 -0700 | |
commit | 92b17c6c6a4d7936c67cd508634ec2a384004f8a (patch) | |
tree | afcf455f08d7b456a2de3b71167b849122af4cb8 /libs/binder/IServiceManager.cpp | |
parent | a9ed1a6486545ffc5bffca561d6f8991e7d5a578 (diff) |
libbinder: remove SM Static.cpp vars.
No need for global exported static state anymore. This also
creates a new lock (gPermissionControllerLock) which controls
access to gPermissionController since there wasn't a reason to
have access to this and sm excluded (likely was out of convenience).
Bug: 129785390
Test: TH
Change-Id: I15bbe2f0ef4f73c555798cd7674edcc56e923575
Diffstat (limited to 'libs/binder/IServiceManager.cpp')
-rw-r--r-- | libs/binder/IServiceManager.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp index 4ba6c2a923..0203d41992 100644 --- a/libs/binder/IServiceManager.cpp +++ b/libs/binder/IServiceManager.cpp @@ -36,6 +36,9 @@ namespace android { sp<IServiceManager> defaultServiceManager() { + static Mutex gDefaultServiceManagerLock; + static sp<IServiceManager> gDefaultServiceManager; + if (gDefaultServiceManager != nullptr) return gDefaultServiceManager; { @@ -74,10 +77,13 @@ bool checkCallingPermission(const String16& permission, int32_t* outPid, int32_t bool checkPermission(const String16& permission, pid_t pid, uid_t uid) { + static Mutex gPermissionControllerLock; + static sp<IPermissionController> gPermissionController; + sp<IPermissionController> pc; - gDefaultServiceManagerLock.lock(); + gPermissionControllerLock.lock(); pc = gPermissionController; - gDefaultServiceManagerLock.unlock(); + gPermissionControllerLock.unlock(); int64_t startTime = 0; @@ -101,11 +107,11 @@ bool checkPermission(const String16& permission, pid_t pid, uid_t uid) } // Object is dead! - gDefaultServiceManagerLock.lock(); + gPermissionControllerLock.lock(); if (gPermissionController == pc) { gPermissionController = nullptr; } - gDefaultServiceManagerLock.unlock(); + gPermissionControllerLock.unlock(); } // Need to retrieve the permission controller. @@ -121,9 +127,9 @@ bool checkPermission(const String16& permission, pid_t pid, uid_t uid) } else { pc = interface_cast<IPermissionController>(binder); // Install the new permission controller, and try again. - gDefaultServiceManagerLock.lock(); + gPermissionControllerLock.lock(); gPermissionController = pc; - gDefaultServiceManagerLock.unlock(); + gPermissionControllerLock.unlock(); } } } @@ -142,6 +148,8 @@ public: virtual sp<IBinder> getService(const String16& name) const { + static bool gSystemBootCompleted = false; + sp<IBinder> svc = checkService(name); if (svc != nullptr) return svc; |