Silence a use-after-free warning from the analyzer
The analyzer is known to be very conservative in the face of atomic operations (e.g. https://bugs.llvm.org/show_bug.cgi?id=34365); this case is no different. It's concerned that `delete this;` might read a different value for `flags`, and proceed to delete `refs`. Since there are many comments explaining why this won't happen (and it all looks sane to me), use a NOLINT to silence this warning. Analyzer warning: system/core/libutils/RefBase.cpp:445:5: warning: Use of memory after it is freed Bug: 27101951 Test: mma. Use-after-free warning is gone. Change-Id: Ic1623971bd1bad546fbb12a79439116c89a6762d
This commit is contained in:
parent
8b7feee38f
commit
6753bc4433
|
@ -442,6 +442,11 @@ void RefBase::decStrong(const void* id) const
|
|||
// and all accesses to refs happen before its deletion in the final decWeak.
|
||||
// The destructor can safely access mRefs because either it's deleting
|
||||
// mRefs itself, or it's running entirely before the final mWeak decrement.
|
||||
//
|
||||
// Since we're doing atomic loads of `flags`, the static analyzer assumes
|
||||
// they can change between `delete this;` and `refs->decWeak(id);`. This is
|
||||
// not the case. The analyzer may become more okay with this patten when
|
||||
// https://bugs.llvm.org/show_bug.cgi?id=34365 gets resolved. NOLINTNEXTLINE
|
||||
refs->decWeak(id);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue