From 7aa8a533ef0657eaa8e786384b3a3821a04c179f Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 3 Jul 2006 17:27:02 +0000 Subject: [PATCH] fix locking for reference counts, enable GDI thread again --- lib/base/object.h | 8 +++++--- lib/gdi/grc.h | 5 ++--- 2 files changed, 7 insertions(+), 6 deletions(-) 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(); diff --git a/lib/gdi/grc.h b/lib/gdi/grc.h index 685b960c..f931046a 100644 --- a/lib/gdi/grc.h +++ b/lib/gdi/grc.h @@ -1,7 +1,6 @@ #ifndef __grc_h #define __grc_h -// #define SYNC_PAINT /* gPainter ist die high-level version. die highlevel daten werden zu low level opcodes ueber die gRC-queue geschickt und landen beim gDC der hardwarespezifisch ist, meist aber auf einen @@ -9,8 +8,8 @@ */ // for debugging use: -#define SYNC_PAINT -//#undef SYNC_PAINT +//#define SYNC_PAINT +#undef SYNC_PAINT #include #include -- 2.30.2