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

Commit b04f98a2 authored by Dominik Laskowski's avatar Dominik Laskowski
Browse files

SF: Fix HWComposer destruction order

The DisplayData vector was being destroyed before the HWC2::Device, but
HWC2::Layer destruction calls back into HWComposer::destroyLayer, which
looks up DisplayData for the display being destroyed.

Bug: 74619554
Test: dvr_display-test
Change-Id: I6260ae16b0896f8992db8ebde63ad4bfc0a0d532
parent 5a9bcace
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -92,7 +92,9 @@ namespace android {
HWComposer::HWComposer(std::unique_ptr<android::Hwc2::Composer> composer)
      : mHwcDevice(std::make_unique<HWC2::Device>(std::move(composer))) {}

HWComposer::~HWComposer() = default;
HWComposer::~HWComposer() {
    mDisplayData.clear();
}

void HWComposer::registerCallback(HWC2::ComposerCallback* callback,
                                  int32_t sequenceId) {
+6 −2
Original line number Diff line number Diff line
@@ -215,8 +215,12 @@ private:
        HWC2::Error presentError;
    };

    std::unique_ptr<HWC2::Device>   mHwcDevice;
    std::vector<DisplayData> mDisplayData{HWC_NUM_PHYSICAL_DISPLAY_TYPES};

    // This must be destroyed before mDisplayData, because destructor may call back into HWComposer
    // and look up DisplayData.
    std::unique_ptr<HWC2::Device> mHwcDevice;

    std::set<size_t> mFreeDisplaySlots;
    std::unordered_map<hwc2_display_t, int32_t> mHwcDisplaySlots;
    // protect mDisplayData from races between prepare and dump