Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c0b8358 authored by Devin Moore's avatar Devin Moore
Browse files

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
parent 69333d68
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -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) {