summaryrefslogtreecommitdiff
path: root/node/SharedPtr.hpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-29 13:57:37 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-29 13:57:37 -0700
commit95f421024a3b3c94a71c5328e23bf5456e7f14ba (patch)
treeb5d908204e87944823a436eaec000b75be609717 /node/SharedPtr.hpp
parentf65b48d447e414e3cdc1e6787cf92a795a11956b (diff)
downloadinfinitytier-95f421024a3b3c94a71c5328e23bf5456e7f14ba.tar.gz
infinitytier-95f421024a3b3c94a71c5328e23bf5456e7f14ba.zip
Code cleanup, and fix some unsafe pointer handling in Network.
Diffstat (limited to 'node/SharedPtr.hpp')
-rw-r--r--node/SharedPtr.hpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/node/SharedPtr.hpp b/node/SharedPtr.hpp
index dcf26035..c1a7db70 100644
--- a/node/SharedPtr.hpp
+++ b/node/SharedPtr.hpp
@@ -64,6 +64,20 @@ public:
++obj->__refCount;
}
+ SharedPtr(T *obj,bool runAwayFromZombies)
+ throw() :
+ _ptr(obj)
+ {
+ // HACK: this is used in "handlers" to take ownership of naked pointers,
+ // an ugly pattern that really ought to be factored out.
+ if (runAwayFromZombies) {
+ if ((int)(++obj->__refCount) < 2) {
+ --obj->__refCount;
+ _ptr = (T *)0;
+ }
+ } else ++obj->__refCount;
+ }
+
SharedPtr(const SharedPtr &sp)
throw() :
_ptr(sp._getAndInc())