Browse Source

Merge branch 'dev' into edge

Adam Ierymenko 7 years ago
parent
commit
9da7967197
3 changed files with 9 additions and 22 deletions
  1. 7 20
      node/SharedPtr.hpp
  2. 1 1
      node/Topology.cpp
  3. 1 1
      node/Topology.hpp

+ 7 - 20
node/SharedPtr.hpp

@@ -76,8 +76,9 @@ public:
 	 *
 	 * @param ptr Naked pointer to assign
 	 */
-	inline void setToUnsafe(T *ptr)
+	inline void set(T *ptr)
 	{
+		zero();
 		++ptr->__refCount;
 		_ptr = ptr;
 	}
@@ -116,27 +117,13 @@ public:
 	}
 
 	/**
-	 * Set this pointer to NULL if this is the only pointer holding the object
-	 *
-	 * @return True if object was deleted and SharedPtr is now NULL (or was already NULL)
+	 * @return Number of references according to this object's ref count or 0 if NULL
 	 */
-	inline bool reclaimIfWeak()
+	inline int references()
 	{
-		if (_ptr) {
-			if (++_ptr->__refCount <= 2) {
-				if (--_ptr->__refCount <= 1) {
-					delete _ptr;
-					_ptr = (T *)0;
-					return true;
-				} else {
-					return false;
-				}
-			} else {
-				return false;
-			}
-		} else {
-			return true;
-		}
+		if (_ptr)
+			return _ptr->__refCount.load();
+		return 0;
 	}
 
 	inline bool operator==(const SharedPtr &sp) const { return (_ptr == sp._ptr); }

+ 1 - 1
node/Topology.cpp

@@ -388,7 +388,7 @@ void Topology::doPeriodicTasks(void *tPtr,int64_t now)
 		Path::HashKey *k = (Path::HashKey *)0;
 		SharedPtr<Path> *p = (SharedPtr<Path> *)0;
 		while (i.next(k,p)) {
-			if (p->reclaimIfWeak())
+			if (p->references() <= 1)
 				_paths.erase(*k);
 		}
 	}

+ 1 - 1
node/Topology.hpp

@@ -119,7 +119,7 @@ public:
 		Mutex::Lock _l(_paths_m);
 		SharedPtr<Path> &p = _paths[Path::HashKey(l,r)];
 		if (!p)
-			p.setToUnsafe(new Path(l,r));
+			p.set(new Path(l,r));
 		return p;
 	}