From 7e7d29000803528d6e04e12e323a2cf28e30fa0d Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 24 Feb 2012 23:32:08 +0100 Subject: [PATCH] Fixed missing counter increment in assign operator --- ports/src/noux/shared_pointer.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ports/src/noux/shared_pointer.h b/ports/src/noux/shared_pointer.h index c354617ee..c1fb58964 100644 --- a/ports/src/noux/shared_pointer.h +++ b/ports/src/noux/shared_pointer.h @@ -82,13 +82,13 @@ namespace Noux { { private: - T *_ptr; + T *_ptr; Genode::Allocator *_alloc; void _dec_ref_count() { if (Shared_pointer_base::_dec_ref_count()) { - PDBG("ref count reached zero -> delete object"); + PDBG("ref count for %p reached zero -> delete object", _ptr); Genode::destroy(_alloc, _ptr); _ptr = 0; _alloc = 0; @@ -107,7 +107,9 @@ namespace Noux { } Shared_pointer(Shared_pointer const & from) - : Shared_pointer_base(from._ref_counter), _ptr(from._ptr), _alloc(from._alloc) + : + Shared_pointer_base(from._ref_counter), + _ptr(from._ptr), _alloc(from._alloc) { _inc_ref_count(); } @@ -118,12 +120,16 @@ namespace Noux { if (_ptr == from._ptr) return *this; + /* forget about original pointed-to object */ _dec_ref_count(); _ref_counter = from._ref_counter; _ptr = from._ptr; _alloc = from._alloc; + /* account for newly assigned pointed-to object */ + _inc_ref_count(); + return *this; }