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

This commit is contained in:
Hans Boehm 2018-08-17 22:20:39 +00:00 committed by Gerrit Code Review
commit 59cd823752
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;
}
}