From 9ae3411abea821b5743e91dff30b02e86eb3dfa8 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Tue, 12 Jun 2018 12:32:27 -0700 Subject: [PATCH] Have ~OctreeProcessor break cycle instead of using weak pointers --- libraries/entities/src/EntityTreeElement.cpp | 6 +++--- libraries/entities/src/EntityTreeElement.h | 6 +++--- libraries/octree/src/OctreeProcessor.cpp | 9 +++------ libraries/octree/src/OctreeProcessor.h | 3 +-- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 719c065522..cbcddfc57b 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -33,7 +33,7 @@ EntityTreeElement::~EntityTreeElement() { OctreeElementPointer EntityTreeElement::createNewElement(unsigned char* octalCode) { auto newChild = EntityTreeElementPointer(new EntityTreeElement(octalCode)); - newChild->setTree(getTree()); + newChild->setTree(_myTree); return newChild; } @@ -44,7 +44,7 @@ void EntityTreeElement::init(unsigned char* octalCode) { OctreeElementPointer EntityTreeElement::addChildAtIndex(int index) { OctreeElementPointer newElement = OctreeElement::addChildAtIndex(index); - std::static_pointer_cast(newElement)->setTree(getTree()); + std::static_pointer_cast(newElement)->setTree(_myTree); return newElement; } @@ -475,7 +475,7 @@ bool EntityTreeElement::removeEntityItem(EntityItemPointer entity, bool deletion int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args) { - return getTree()->readEntityDataFromBuffer(data, bytesLeftToRead, args); + return _myTree->readEntityDataFromBuffer(data, bytesLeftToRead, args); } void EntityTreeElement::addEntityItem(EntityItemPointer entity) { diff --git a/libraries/entities/src/EntityTreeElement.h b/libraries/entities/src/EntityTreeElement.h index 023e908e2c..76e1e40812 100644 --- a/libraries/entities/src/EntityTreeElement.h +++ b/libraries/entities/src/EntityTreeElement.h @@ -161,8 +161,8 @@ public: virtual uint16_t size() const; bool hasEntities() const { return size() > 0; } - void setTree(EntityTreePointer tree) { _myTree = std::weak_ptr(tree); } - EntityTreePointer getTree() const { return _myTree.lock(); } + void setTree(EntityTreePointer tree) { _myTree = tree; } + EntityTreePointer getTree() const { return _myTree; } void addEntityItem(EntityItemPointer entity); @@ -234,7 +234,7 @@ public: protected: virtual void init(unsigned char * octalCode) override; - std::weak_ptr _myTree; + EntityTreePointer _myTree; EntityItems _entityItems; }; diff --git a/libraries/octree/src/OctreeProcessor.cpp b/libraries/octree/src/OctreeProcessor.cpp index db78e985e6..beaac1198c 100644 --- a/libraries/octree/src/OctreeProcessor.cpp +++ b/libraries/octree/src/OctreeProcessor.cpp @@ -20,12 +20,6 @@ #include "OctreeLogging.h" -OctreeProcessor::OctreeProcessor() : - _tree(NULL), - _managedTree(false) -{ -} - void OctreeProcessor::init() { if (!_tree) { _tree = createTree(); @@ -34,6 +28,9 @@ void OctreeProcessor::init() { } OctreeProcessor::~OctreeProcessor() { + if (_tree) { + _tree->eraseAllOctreeElements(false); + } } void OctreeProcessor::setTree(OctreePointer newTree) { diff --git a/libraries/octree/src/OctreeProcessor.h b/libraries/octree/src/OctreeProcessor.h index 25e280abca..325b33cd15 100644 --- a/libraries/octree/src/OctreeProcessor.h +++ b/libraries/octree/src/OctreeProcessor.h @@ -28,7 +28,6 @@ class OctreeProcessor : public QObject, public QEnableSharedFromThis { Q_OBJECT public: - OctreeProcessor(); virtual ~OctreeProcessor(); virtual char getMyNodeType() const = 0; @@ -61,7 +60,7 @@ protected: virtual OctreePointer createTree() = 0; OctreePointer _tree; - bool _managedTree; + bool _managedTree { false }; SimpleMovingAverage _elementsPerPacket; SimpleMovingAverage _entitiesPerPacket;