Merge "Fix a wp<> bug where the owner ID would be wrong"
This commit is contained in:
commit
d4e5832b69
@ -425,8 +425,11 @@ void wp<T>::set_object_and_refs(T* other, weakref_type* refs)
|
||||
template<typename T>
|
||||
sp<T> wp<T>::promote() const
|
||||
{
|
||||
T* p = (m_ptr && m_refs->attemptIncStrong(this)) ? m_ptr : 0;
|
||||
return sp<T>(p, true);
|
||||
sp<T> result;
|
||||
if (m_ptr && m_refs->attemptIncStrong(&result)) {
|
||||
result.set_pointer(m_ptr);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
@ -104,11 +104,8 @@ public:
|
||||
private:
|
||||
template<typename Y> friend class sp;
|
||||
template<typename Y> friend class wp;
|
||||
|
||||
// Optimization for wp::promote().
|
||||
sp(T* p, bool);
|
||||
|
||||
T* m_ptr;
|
||||
void set_pointer(T* ptr);
|
||||
T* m_ptr;
|
||||
};
|
||||
|
||||
#undef COMPARE
|
||||
@ -206,10 +203,9 @@ void sp<T>::clear()
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
sp<T>::sp(T* p, bool)
|
||||
: m_ptr(p)
|
||||
{
|
||||
}
|
||||
void sp<T>::set_pointer(T* ptr) {
|
||||
m_ptr = ptr;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline TextOutput& operator<<(TextOutput& to, const sp<T>& val)
|
||||
|
Loading…
Reference in New Issue
Block a user