diff options
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/binder/Android.bp | 23 | ||||
| -rw-r--r-- | libs/binder/IServiceManager.cpp | 2 | ||||
| -rw-r--r-- | libs/binder/RpcSession.cpp | 21 | ||||
| -rw-r--r-- | libs/binder/include/binder/IInterface.h | 4 | ||||
| -rw-r--r-- | libs/binder/include/binder/RpcSession.h | 1 |
5 files changed, 30 insertions, 21 deletions
diff --git a/libs/binder/Android.bp b/libs/binder/Android.bp index 6d3c88d539..9389bec509 100644 --- a/libs/binder/Android.bp +++ b/libs/binder/Android.bp @@ -60,11 +60,15 @@ cc_library_headers { // // Currently, these are only on system android (not vendor, not host) // TODO(b/183654927) - move these into separate libraries -libbinder_device_interface_sources = [ - "IPermissionController.cpp", - "PermissionCache.cpp", - "PermissionController.cpp", -] + +filegroup { + name: "libbinder_device_interface_sources", + srcs: [ + "IPermissionController.cpp", + "PermissionCache.cpp", + "PermissionController.cpp", + ], +} cc_library { name: "libbinder", @@ -126,19 +130,20 @@ cc_library { "TextOutput.cpp", "Utils.cpp", ":libbinder_aidl", + ":libbinder_device_interface_sources", ], target: { android: { - srcs: libbinder_device_interface_sources, - // NOT static to keep the wire protocol unfrozen static: { enabled: false, }, }, vendor: { - exclude_srcs: libbinder_device_interface_sources, + exclude_srcs: [ + ":libbinder_device_interface_sources", + ], }, darwin: { enabled: false, @@ -366,6 +371,7 @@ filegroup { cc_library { name: "libbatterystats_aidl", + host_supported: true, srcs: [ "IBatteryStats.cpp", ], @@ -378,6 +384,7 @@ cc_library { cc_library { name: "libprocessinfoservice_aidl", + host_supported: true, srcs: [ "IProcessInfoService.cpp", "ProcessInfoService.cpp", diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp index fd2d86857e..fd47783acd 100644 --- a/libs/binder/IServiceManager.cpp +++ b/libs/binder/IServiceManager.cpp @@ -167,7 +167,7 @@ void setDefaultServiceManager(const sp<IServiceManager>& sm) { } } -#if !defined(__ANDROID_VNDK__) && defined(__ANDROID__) +#if !defined(__ANDROID_VNDK__) // IPermissionController is not accessible to vendors bool checkCallingPermission(const String16& permission) diff --git a/libs/binder/RpcSession.cpp b/libs/binder/RpcSession.cpp index 8edc78f2f5..7ba08edec4 100644 --- a/libs/binder/RpcSession.cpp +++ b/libs/binder/RpcSession.cpp @@ -699,10 +699,7 @@ status_t RpcSession::addOutgoingConnection(std::unique_ptr<RpcTransport> rpcTran mRpcBinderState->sendConnectionInit(connection, sp<RpcSession>::fromExisting(this)); } - { - std::lock_guard<std::mutex> _l(mMutex); - connection->exclusiveTid = std::nullopt; - } + clearConnectionTid(connection); return status; } @@ -773,6 +770,15 @@ bool RpcSession::removeIncomingConnection(const sp<RpcConnection>& connection) { return false; } +void RpcSession::clearConnectionTid(const sp<RpcConnection>& connection) { + std::unique_lock<std::mutex> _l(mMutex); + connection->exclusiveTid = std::nullopt; + if (mConnections.mWaitingThreads > 0) { + _l.unlock(); + mAvailableConnectionCv.notify_one(); + } +} + std::vector<uint8_t> RpcSession::getCertificate(RpcCertificateFormat format) { return mCtx->getCertificate(format); } @@ -902,12 +908,7 @@ RpcSession::ExclusiveConnection::~ExclusiveConnection() { // is using this fd, and it retains the right to it. So, we don't give up // exclusive ownership, and no thread is freed. if (!mReentrant && mConnection != nullptr) { - std::unique_lock<std::mutex> _l(mSession->mMutex); - mConnection->exclusiveTid = std::nullopt; - if (mSession->mConnections.mWaitingThreads > 0) { - _l.unlock(); - mSession->mAvailableConnectionCv.notify_one(); - } + mSession->clearConnectionTid(mConnection); } } diff --git a/libs/binder/include/binder/IInterface.h b/libs/binder/include/binder/IInterface.h index f295417ab2..e864f9e6a3 100644 --- a/libs/binder/include/binder/IInterface.h +++ b/libs/binder/include/binder/IInterface.h @@ -72,9 +72,9 @@ class BnInterface : public INTERFACE, public BBinder public: virtual sp<IInterface> queryLocalInterface(const String16& _descriptor); virtual const String16& getInterfaceDescriptor() const; + typedef INTERFACE BaseInterface; protected: - typedef INTERFACE BaseInterface; virtual IBinder* onAsBinder(); }; @@ -85,9 +85,9 @@ class BpInterface : public INTERFACE, public BpRefBase { public: explicit BpInterface(const sp<IBinder>& remote); + typedef INTERFACE BaseInterface; protected: - typedef INTERFACE BaseInterface; virtual IBinder* onAsBinder(); }; diff --git a/libs/binder/include/binder/RpcSession.h b/libs/binder/include/binder/RpcSession.h index e76b14046b..7d5d481f83 100644 --- a/libs/binder/include/binder/RpcSession.h +++ b/libs/binder/include/binder/RpcSession.h @@ -264,6 +264,7 @@ private: sp<RpcConnection> assignIncomingConnectionToThisThread( std::unique_ptr<RpcTransport> rpcTransport); [[nodiscard]] bool removeIncomingConnection(const sp<RpcConnection>& connection); + void clearConnectionTid(const sp<RpcConnection>& connection); [[nodiscard]] status_t initShutdownTrigger(); |