From 8c3c1172011e71f591060f73e460f45a717a4e31 Mon Sep 17 00:00:00 2001 From: Rene Gollent Date: Fri, 10 Jun 2011 22:31:33 +0000 Subject: [PATCH] Adjust ReleaseReference() to also return the previous ref count as AcquireReference() now does, and adjust all callers that relied on the previous return type. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42091 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/shared/Referenceable.h | 5 +++-- .../kernel/file_systems/netfs/server/ClientConnection.cpp | 2 +- .../kernel/file_systems/netfs/shared/NetAddress.cpp | 2 +- src/kits/support/Referenceable.cpp | 8 ++++---- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/headers/private/shared/Referenceable.h b/headers/private/shared/Referenceable.h index f020d7e163..e1f0a6edcd 100644 --- a/headers/private/shared/Referenceable.h +++ b/headers/private/shared/Referenceable.h @@ -17,9 +17,10 @@ public: BReferenceable(); virtual ~BReferenceable(); + // acquire and release return + // the previous ref count int32 AcquireReference(); - bool ReleaseReference(); - // returns true after last + int32 ReleaseReference(); int32 CountReferences() const { return fReferenceCount; } diff --git a/src/add-ons/kernel/file_systems/netfs/server/ClientConnection.cpp b/src/add-ons/kernel/file_systems/netfs/server/ClientConnection.cpp index 8a73ad9898..8e2bd1d975 100644 --- a/src/add-ons/kernel/file_systems/netfs/server/ClientConnection.cpp +++ b/src/add-ons/kernel/file_systems/netfs/server/ClientConnection.cpp @@ -2789,7 +2789,7 @@ ClientConnection::_PutVolume(ClientVolume* volume) // decrement reference counter and remove the volume, if 0 AutoLocker locker(fVolumes); - bool removed = (volume->ReleaseReference() && volume->IsRemoved()); + bool removed = (volume->ReleaseReference() == 1 && volume->IsRemoved()); if (removed) fVolumes->Remove(volume->GetID()); locker.Unlock(); diff --git a/src/add-ons/kernel/file_systems/netfs/shared/NetAddress.cpp b/src/add-ons/kernel/file_systems/netfs/shared/NetAddress.cpp index 90d1f291ab..33d8d53d1b 100644 --- a/src/add-ons/kernel/file_systems/netfs/shared/NetAddress.cpp +++ b/src/add-ons/kernel/file_systems/netfs/shared/NetAddress.cpp @@ -253,7 +253,7 @@ NetAddressResolver::~NetAddressResolver() { if (fResolver) { _Lock(); - if (sResolver->ReleaseReference()) { + if (sResolver->ReleaseReference() == 1) { delete sResolver; sResolver = NULL; } diff --git a/src/kits/support/Referenceable.cpp b/src/kits/support/Referenceable.cpp index 39906255ae..badfd2d424 100644 --- a/src/kits/support/Referenceable.cpp +++ b/src/kits/support/Referenceable.cpp @@ -41,14 +41,14 @@ BReferenceable::AcquireReference() } -bool +int32 BReferenceable::ReleaseReference() { - bool unreferenced = (atomic_add(&fReferenceCount, -1) == 1); + int32 previousReferenceCount = atomic_add(&fReferenceCount, -1); TRACE("%p: release %ld\n", this, fReferenceCount); - if (unreferenced) + if (previousReferenceCount == 1) LastReferenceReleased(); - return unreferenced; + return previousReferenceCount; }