From d32f94f43c296e2346c045bef770b8926794c2e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 1 Oct 2010 06:49:24 +0000 Subject: [PATCH] * Added optional tracing support which can be very useful when debugging reference count problems. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38866 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/support/Referenceable.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/kits/support/Referenceable.cpp b/src/kits/support/Referenceable.cpp index 92d6cc53c7..9c6fa15550 100644 --- a/src/kits/support/Referenceable.cpp +++ b/src/kits/support/Referenceable.cpp @@ -3,12 +3,23 @@ * Distributed under the terms of the MIT License. */ + #include +//#define TRACE_REFERENCEABLE +#ifdef TRACE_REFERENCEABLE +# include +# define TRACE(x, ...) ktrace_printf(x, __VA_ARGS__); +#else +# define TRACE(x, ...) +#endif + + BReferenceable::BReferenceable(bool deleteWhenUnreferenced) - : fReferenceCount(1), - fDeleteWhenUnreferenced(deleteWhenUnreferenced) + : + fReferenceCount(1), + fDeleteWhenUnreferenced(deleteWhenUnreferenced) { } @@ -23,6 +34,8 @@ BReferenceable::AcquireReference() { if (atomic_add(&fReferenceCount, 1) == 0) FirstReferenceAcquired(); + + TRACE("%p: acquire %ld\n", this, fReferenceCount); } @@ -30,6 +43,7 @@ bool BReferenceable::ReleaseReference() { bool unreferenced = (atomic_add(&fReferenceCount, -1) == 1); + TRACE("%p: release %ld\n", this, fReferenceCount); if (unreferenced) LastReferenceReleased(); return unreferenced;