зеркало из https://github.com/mozilla/gecko-dev.git
Bug 834769 - Change the "destroyed" state value for RefCounted. r=Waldo
This commit is contained in:
Родитель
df70168a14
Коммит
66cbfc73f8
|
@ -36,19 +36,23 @@ template<typename T> OutParamRef<T> byRef(RefPtr<T>&);
|
||||||
* live RefCounted<T> are controlled by RefPtr<T> and
|
* live RefCounted<T> are controlled by RefPtr<T> and
|
||||||
* RefPtr<super/subclass of T>. Upon a transition from refcounted==1
|
* RefPtr<super/subclass of T>. Upon a transition from refcounted==1
|
||||||
* to 0, the RefCounted<T> "dies" and is destroyed. The "destroyed"
|
* to 0, the RefCounted<T> "dies" and is destroyed. The "destroyed"
|
||||||
* state is represented in DEBUG builds by refcount==-0xdead. This
|
* state is represented in DEBUG builds by refcount==0xffffdead. This
|
||||||
* state distinguishes use-before-ref (refcount==0) from
|
* state distinguishes use-before-ref (refcount==0) from
|
||||||
* use-after-destroy (refcount==-0xdead).
|
* use-after-destroy (refcount==0xffffdead).
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class RefCounted
|
class RefCounted
|
||||||
{
|
{
|
||||||
friend class RefPtr<T>;
|
friend class RefPtr<T>;
|
||||||
|
|
||||||
public:
|
#ifdef DEBUG
|
||||||
|
static const int dead = 0xffffdead;
|
||||||
|
#endif
|
||||||
|
protected:
|
||||||
RefCounted() : refCnt(0) { }
|
RefCounted() : refCnt(0) { }
|
||||||
~RefCounted() { MOZ_ASSERT(refCnt == -0xdead); }
|
~RefCounted() { MOZ_ASSERT(refCnt == dead); }
|
||||||
|
|
||||||
|
public:
|
||||||
// Compatibility with nsRefPtr.
|
// Compatibility with nsRefPtr.
|
||||||
void AddRef() {
|
void AddRef() {
|
||||||
MOZ_ASSERT(refCnt >= 0);
|
MOZ_ASSERT(refCnt >= 0);
|
||||||
|
@ -59,7 +63,7 @@ class RefCounted
|
||||||
MOZ_ASSERT(refCnt > 0);
|
MOZ_ASSERT(refCnt > 0);
|
||||||
if (0 == --refCnt) {
|
if (0 == --refCnt) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
refCnt = -0xdead;
|
refCnt = dead;
|
||||||
#endif
|
#endif
|
||||||
delete static_cast<T*>(this);
|
delete static_cast<T*>(this);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче