From 7aa8a533ef0657eaa8e786384b3a3821a04c179f Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 3 Jul 2006 17:27:02 +0000 Subject: fix locking for reference counts, enable GDI thread again --- lib/base/object.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'lib/base') diff --git a/lib/base/object.h b/lib/base/object.h index edd68a86..17178457 100644 --- a/lib/base/object.h +++ b/lib/base/object.h @@ -9,6 +9,7 @@ #ifdef OBJECT_DEBUG #include #endif +#include typedef int RESULT; @@ -38,12 +39,13 @@ public: }; #ifndef SWIG -#define DECLARE_REF(x) private: oRefCount ref; public: void AddRef(); void Release(); +#define DECLARE_REF(x) private: eSingleLock ref_lock; oRefCount ref; public: void AddRef(); void Release(); #ifdef OBJECT_DEBUG extern int object_total_remaining; -#define DEFINE_REF(c) void c::AddRef() { ++object_total_remaining; ++ref; eDebug("OBJECT_DEBUG " #c "+%p now %d", this, (int)ref); } void c::Release() { --object_total_remaining; eDebug("OBJECT_DEBUG " #c "-%p now %d", this, ref-1); if (!--ref) delete this; } +#define DEFINE_REF(c) void c::AddRef() { eSingleLocker l(ref_lock); ++object_total_remaining; ++ref; eDebug("OBJECT_DEBUG " #c "+%p now %d", this, (int)ref); } void c::Release() { { eSingleLocker l(ref_lock); --object_total_remaining; --ref; eDebug("OBJECT_DEBUG " #c "-%p now %d", this, ref); } if (!ref) delete this; } +#error fix locking for debug #else -#define DEFINE_REF(c) void c::AddRef() { ++ref; } void c::Release() { if (!--ref) delete this; } +#define DEFINE_REF(c) void c::AddRef() { eSingleLocker l(ref_lock); ++ref; } void c::Release() { { eSingleLocker l(ref_lock); --ref; } if (!ref) delete this; } #endif #else #define DECLARE_REF(x) private: void AddRef(); void Release(); -- cgit v1.2.3