diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2006-07-03 17:27:02 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2006-07-03 17:27:02 +0000 |
| commit | 7aa8a533ef0657eaa8e786384b3a3821a04c179f (patch) | |
| tree | e5309380630c18b5a06c63cd351b2f6777f4ffa9 /lib/base/object.h | |
| parent | 196634a2be3f5cbac64aeefc6e0aaef142115567 (diff) | |
| download | enigma2-7aa8a533ef0657eaa8e786384b3a3821a04c179f.tar.gz enigma2-7aa8a533ef0657eaa8e786384b3a3821a04c179f.zip | |
fix locking for reference counts, enable GDI thread again
Diffstat (limited to 'lib/base/object.h')
| -rw-r--r-- | lib/base/object.h | 8 |
1 files changed, 5 insertions, 3 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 <lib/base/eerror.h> #endif +#include <lib/base/elock.h> 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(); |
