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

Commit 077135b1 authored by Hans Boehm's avatar Hans Boehm Committed by Gerrit Code Review
Browse files

Merge "Fix race bug in attemptIncStrong"

parents ed3596aa 7f27cbc3
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -580,17 +580,16 @@ bool RefBase::weakref_type::attemptIncStrong(const void* id)
            // grab a strong-reference, which is always safe due to the
            // extended life-time.
            curCount = impl->mStrong.fetch_add(1, std::memory_order_relaxed);
        }

            // If the strong reference count has already been incremented by
            // someone else, the implementor of onIncStrongAttempted() is holding
            // an unneeded reference.  So call onLastStrongRef() here to remove it.
            // (No, this is not pretty.)  Note that we MUST NOT do this if we
            // are in fact acquiring the first reference.
        if (curCount > 0 && curCount < INITIAL_STRONG_VALUE) {
            if (curCount != 0 && curCount != INITIAL_STRONG_VALUE) {
                impl->mBase->onLastStrongRef(id);
            }
        }
    }
    
    impl->addStrongRef(id);