diff options
author | 2024-09-05 19:45:27 +0000 | |
---|---|---|
committer | 2024-09-05 23:57:27 +0000 | |
commit | 5c0b835816a4fac68c50a45f1112824da4504990 (patch) | |
tree | e2999fe1a3f12cc436fec259b9c7d433880bc364 /libs/binder/IServiceManager.cpp | |
parent | 69333d682bdc641c92bd88181ffe7219ac348a5b (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.cpp | 10 |
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) { |