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

Commit 282048a2 authored by John Reck's avatar John Reck Committed by android-build-merger
Browse files

Merge "Fix setPositionListener race condition" into qt-dev

am: 2c522982

Change-Id: Iea1515f11646a38bf7252ac7ee547296aeddced1
parents c7460662 2c522982
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -264,6 +264,12 @@ void RenderNode::syncProperties() {
}

void RenderNode::pushStagingPropertiesChanges(TreeInfo& info) {
    if (mPositionListenerDirty) {
        mPositionListener = std::move(mStagingPositionListener);
        mStagingPositionListener = nullptr;
        mPositionListenerDirty = false;
    }

    // Push the animators first so that setupStartValueIfNecessary() is called
    // before properties() is trampled by stagingProperties(), as they are
    // required by some animators.
+4 −4
Original line number Diff line number Diff line
@@ -188,11 +188,9 @@ public:
        virtual void onPositionLost(RenderNode& node, const TreeInfo* info) = 0;
    };

    // Note this is not thread safe, this needs to be called
    // before the RenderNode is used for drawing.
    // RenderNode takes ownership of the pointer
    ANDROID_API void setPositionListener(PositionListener* listener) {
        mPositionListener = listener;
        mStagingPositionListener = listener;
        mPositionListenerDirty = true;
    }

    // This is only modified in MODE_FULL, so it can be safely accessed
@@ -275,6 +273,8 @@ private:
    // mDisplayList, not mStagingDisplayList.
    uint32_t mParentCount;

    bool mPositionListenerDirty = false;
    sp<PositionListener> mStagingPositionListener;
    sp<PositionListener> mPositionListener;

    UsageHint mUsageHint = UsageHint::Unknown;