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

Commit d6a2ffff authored by Frederick Mayle's avatar Frederick Mayle
Browse files

camera: Fix double ownership of AidlCameraDeviceCallbacks

Using std::make_shared with ndk::SharedRefBase objects causes memory
errors.

ndk::SharedRefBase::make uses std::static_pointer_cast internally, which
doesn't work when virtual inheritance is used. Virtual inheritance seems
unnecessary here, so I've removed it.

Bug: 226379467
Test: TH
Change-Id: I0df82ca30e3ebea4b48854f5a58796c22d169da5
parent 656d3e6d
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -75,7 +75,7 @@ class AidlCamera3OfflineSession :
    // See explanation for why we need a separate class for this in
    // See explanation for why we need a separate class for this in
    // AidlCamera3Device::AidlCameraDeviceCallbacks in AidlCamera3Device.h
    // AidlCamera3Device::AidlCameraDeviceCallbacks in AidlCamera3Device.h
    class AidlCameraDeviceCallbacks :
    class AidlCameraDeviceCallbacks :
            virtual public aidl::android::hardware::camera::device::BnCameraDeviceCallback {
            public aidl::android::hardware::camera::device::BnCameraDeviceCallback {
      public:
      public:


        AidlCameraDeviceCallbacks(wp<AidlCamera3OfflineSession> parent) : mParent(parent)  { }
        AidlCameraDeviceCallbacks(wp<AidlCamera3OfflineSession> parent) : mParent(parent)  { }
@@ -112,7 +112,9 @@ class AidlCamera3OfflineSession :
                    offlineSession) :
                    offlineSession) :
      Camera3OfflineSession(id, inputStream, offlineStreamSet, std::move(bufferRecords),
      Camera3OfflineSession(id, inputStream, offlineStreamSet, std::move(bufferRecords),
              offlineReqs, offlineStates),
              offlineReqs, offlineStates),
      mSession(offlineSession) { mCallbacks = std::make_shared<AidlCameraDeviceCallbacks>(this);};
      mSession(offlineSession) {
        mCallbacks = ndk::SharedRefBase::make<AidlCameraDeviceCallbacks>(this);
      };


    /**
    /**
     * End of CameraOfflineSessionBase interface
     * End of CameraOfflineSessionBase interface