diff options
author | Pixel <pixel@nobis-crew.org> | 2011-12-05 00:44:55 -0800 |
---|---|---|
committer | Pixel <pixel@nobis-crew.org> | 2011-12-05 00:44:55 -0800 |
commit | b419f3e159212c9998b3f86c1fee332620472f4e (patch) | |
tree | 8fe0edcda87f7ee43c2fb8a03f6f576f31ac3057 | |
parent | 67432fe6501e1ae011870310b1dbcfb49b5233a8 (diff) |
Making the ref counter on Handles thread-safe. Not that it renders the usage of Handles thread-safe, but at least one can now transmit Handles over threads safely without risking a refcount bug.
-rw-r--r-- | includes/Handle.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/includes/Handle.h b/includes/Handle.h index e3ff356..1b04556 100644 --- a/includes/Handle.h +++ b/includes/Handle.h @@ -3,6 +3,7 @@ #include <Exceptions.h> #include <Printer.h> #include <BString.h> +#include <Atomic.h> namespace Balau { @@ -57,9 +58,9 @@ class Handle { protected: Handle() : m_refCount(0) { } private: - void addRef() { m_refCount++; } + void addRef() { Atomic::Increment(&m_refCount); } void delRef() { - if (--m_refCount == 0) { + if (Atomic::Decrement(&m_refCount) == 0) { if (!isClosed()) close(); delete this; @@ -69,7 +70,7 @@ class Handle { template<class T> friend class IO; - int m_refCount; + volatile int m_refCount; }; class HPrinter : public Handle { |