Check sp<>::clear() for data races

sp<>::clear() presents the same risks of heap corruption in the presence
of data races as does assignment. Add the same data race check.

Bug: 112651574
Test: Build and boot AOSP
Change-Id: I75d4eedd756d521920e61ff9187509f9145d4235
This commit is contained in:
Hans Boehm 2018-08-17 11:40:39 -07:00
parent 6a581b7b66
commit f4f76205fe
1 changed files with 4 additions and 2 deletions

View File

@ -228,8 +228,10 @@ void sp<T>::force_set(T* other) {
template<typename T>
void sp<T>::clear() {
if (m_ptr) {
m_ptr->decStrong(this);
T* oldPtr(*const_cast<T* volatile*>(&m_ptr));
if (oldPtr) {
oldPtr->decStrong(this);
if (oldPtr != *const_cast<T* volatile*>(&m_ptr)) sp_report_race();
m_ptr = nullptr;
}
}