diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-10-29 13:57:37 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-10-29 13:57:37 -0700 |
| commit | 95f421024a3b3c94a71c5328e23bf5456e7f14ba (patch) | |
| tree | b5d908204e87944823a436eaec000b75be609717 /node/SharedPtr.hpp | |
| parent | f65b48d447e414e3cdc1e6787cf92a795a11956b (diff) | |
| download | infinitytier-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.hpp | 14 |
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()) |
