* 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
This commit is contained in:
@@ -3,11 +3,22 @@
|
|||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <Referenceable.h>
|
#include <Referenceable.h>
|
||||||
|
|
||||||
|
|
||||||
|
//#define TRACE_REFERENCEABLE
|
||||||
|
#ifdef TRACE_REFERENCEABLE
|
||||||
|
# include <tracing.h>
|
||||||
|
# define TRACE(x, ...) ktrace_printf(x, __VA_ARGS__);
|
||||||
|
#else
|
||||||
|
# define TRACE(x, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
BReferenceable::BReferenceable(bool deleteWhenUnreferenced)
|
BReferenceable::BReferenceable(bool deleteWhenUnreferenced)
|
||||||
: fReferenceCount(1),
|
:
|
||||||
|
fReferenceCount(1),
|
||||||
fDeleteWhenUnreferenced(deleteWhenUnreferenced)
|
fDeleteWhenUnreferenced(deleteWhenUnreferenced)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -23,6 +34,8 @@ BReferenceable::AcquireReference()
|
|||||||
{
|
{
|
||||||
if (atomic_add(&fReferenceCount, 1) == 0)
|
if (atomic_add(&fReferenceCount, 1) == 0)
|
||||||
FirstReferenceAcquired();
|
FirstReferenceAcquired();
|
||||||
|
|
||||||
|
TRACE("%p: acquire %ld\n", this, fReferenceCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -30,6 +43,7 @@ bool
|
|||||||
BReferenceable::ReleaseReference()
|
BReferenceable::ReleaseReference()
|
||||||
{
|
{
|
||||||
bool unreferenced = (atomic_add(&fReferenceCount, -1) == 1);
|
bool unreferenced = (atomic_add(&fReferenceCount, -1) == 1);
|
||||||
|
TRACE("%p: release %ld\n", this, fReferenceCount);
|
||||||
if (unreferenced)
|
if (unreferenced)
|
||||||
LastReferenceReleased();
|
LastReferenceReleased();
|
||||||
return unreferenced;
|
return unreferenced;
|
||||||
|
|||||||
Reference in New Issue
Block a user