summaryrefslogtreecommitdiff
path: root/libs/binder/IServiceManager.cpp
diff options
context:
space:
mode:
author Devin Moore <devinmoore@google.com> 2024-09-05 19:45:27 +0000
committer Devin Moore <devinmoore@google.com> 2024-09-05 23:57:27 +0000
commit5c0b835816a4fac68c50a45f1112824da4504990 (patch)
treee2999fe1a3f12cc436fec259b9c7d433880bc364 /libs/binder/IServiceManager.cpp
parent69333d682bdc641c92bd88181ffe7219ac348a5b (diff)
std::move member initializer lists
Was previously creating a weak_ptr from a shared_ptr that was already moved. Only worked becuase the constructor wasn't actually moving the argument as expected. std::move in constructor initializer lists when desired. Create the weak_ptr before moving. Test: atest binderRpcTest Bug: aosp/3212539 comment after submitting Change-Id: I8ce98cbcb5e3a40b240ffb1114cbee41be976d61
Diffstat (limited to 'libs/binder/IServiceManager.cpp')
-rw-r--r--libs/binder/IServiceManager.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp
index 8a90ce2cab..88761d772f 100644
--- a/libs/binder/IServiceManager.cpp
+++ b/libs/binder/IServiceManager.cpp
@@ -157,7 +157,7 @@ protected:
class AccessorProvider {
public:
- AccessorProvider(RpcAccessorProvider&& provider) : mProvider(provider) {}
+ AccessorProvider(RpcAccessorProvider&& provider) : mProvider(std::move(provider)) {}
sp<IBinder> provide(const String16& name) { return mProvider(name); }
private:
@@ -168,7 +168,8 @@ private:
class AccessorProviderEntry {
public:
- AccessorProviderEntry(std::shared_ptr<AccessorProvider>&& provider) : mProvider(provider) {}
+ AccessorProviderEntry(std::shared_ptr<AccessorProvider>&& provider)
+ : mProvider(std::move(provider)) {}
std::shared_ptr<AccessorProvider> mProvider;
private:
@@ -183,7 +184,7 @@ private:
class LocalAccessor : public android::os::BnAccessor {
public:
LocalAccessor(const String16& instance, RpcSocketAddressProvider&& connectionInfoProvider)
- : mInstance(instance), mConnectionInfoProvider(connectionInfoProvider) {
+ : mInstance(instance), mConnectionInfoProvider(std::move(connectionInfoProvider)) {
LOG_ALWAYS_FATAL_IF(!mConnectionInfoProvider,
"LocalAccessor object needs a valid connection info provider");
}
@@ -321,9 +322,10 @@ std::weak_ptr<AccessorProvider> addAccessorProvider(RpcAccessorProvider&& provid
std::lock_guard<std::mutex> lock(gAccessorProvidersMutex);
std::shared_ptr<AccessorProvider> provider =
std::make_shared<AccessorProvider>(std::move(providerCallback));
+ std::weak_ptr<AccessorProvider> receipt = provider;
gAccessorProviders.push_back(AccessorProviderEntry(std::move(provider)));
- return provider;
+ return receipt;
}
status_t removeAccessorProvider(std::weak_ptr<AccessorProvider> wProvider) {