aboutsummaryrefslogtreecommitdiff
path: root/lib/base/object.h
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2006-07-03 17:27:02 +0000
committerFelix Domke <tmbinc@elitedvb.net>2006-07-03 17:27:02 +0000
commit7aa8a533ef0657eaa8e786384b3a3821a04c179f (patch)
treee5309380630c18b5a06c63cd351b2f6777f4ffa9 /lib/base/object.h
parent196634a2be3f5cbac64aeefc6e0aaef142115567 (diff)
downloadenigma2-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.h8
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();