diff options
author | Mathias Agopian <mathias@google.com> | 2011-02-24 18:27:40 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-02-24 18:27:40 -0800 |
commit | 5af3d0100524ac16fb7a7fba2a83a8d135009565 (patch) | |
tree | d11d01f4f98d928b6ce886bc66bac6808ab055af /include/utils | |
parent | 66d16910a84c9a67d854cf1d2d78cee94641be1f (diff) | |
parent | 49862c3630632303c40ca37f1791ed4b092ce063 (diff) | |
download | frameworks_base-5af3d0100524ac16fb7a7fba2a83a8d135009565.zip frameworks_base-5af3d0100524ac16fb7a7fba2a83a8d135009565.tar.gz frameworks_base-5af3d0100524ac16fb7a7fba2a83a8d135009565.tar.bz2 |
Merge "Fix a wp<> bug where the owner ID would be wrong"
Diffstat (limited to 'include/utils')
-rw-r--r-- | include/utils/RefBase.h | 7 | ||||
-rw-r--r-- | include/utils/StrongPointer.h | 14 |
2 files changed, 10 insertions, 11 deletions
diff --git a/include/utils/RefBase.h b/include/utils/RefBase.h index 9b0e7d8..f355087 100644 --- a/include/utils/RefBase.h +++ b/include/utils/RefBase.h @@ -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> diff --git a/include/utils/StrongPointer.h b/include/utils/StrongPointer.h index 5daccf4..a8c9897 100644 --- a/include/utils/StrongPointer.h +++ b/include/utils/StrongPointer.h @@ -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) |