diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e0796e2f0b..41eb7a305d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1235,6 +1235,9 @@ void Application::cleanupBeforeQuit() { } Application::~Application() { + _entityClipboard->eraseAllOctreeElements(); + _entityClipboard.reset(); + EntityTreePointer tree = getEntities()->getTree(); tree->setSimulation(nullptr); @@ -1244,7 +1247,7 @@ Application::~Application() { _physicsEngine->setCharacterController(nullptr); // remove avatars from physics engine - DependencyManager::get()->clearOtherAvatars(); + DependencyManager::get()->clearAllAvatars(); VectorOfMotionStates motionStates; DependencyManager::get()->getObjectsToRemoveFromPhysics(motionStates); _physicsEngine->removeObjects(motionStates); diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 9f3a0eb254..efd1bede47 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -77,7 +77,6 @@ AvatarManager::AvatarManager(QObject* parent) : } AvatarManager::~AvatarManager() { - _myAvatar->die(); } void AvatarManager::init() { @@ -250,6 +249,17 @@ void AvatarManager::clearOtherAvatars() { _myAvatar->clearLookAtTargetAvatar(); } +void AvatarManager::clearAllAvatars() { + clearOtherAvatars(); + + QWriteLocker locker(&_hashLock); + + _myAvatar->die(); + _myAvatar.reset(); + + _avatarHash.clear(); +} + void AvatarManager::setLocalLights(const QVector& localLights) { if (QThread::currentThread() != thread()) { QMetaObject::invokeMethod(this, "setLocalLights", Q_ARG(const QVector&, localLights)); diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 57fc1022ea..bedd089c93 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -45,6 +45,7 @@ public: void updateOtherAvatars(float deltaTime); void clearOtherAvatars(); + void clearAllAvatars(); bool shouldShowReceiveStats() const { return _shouldShowReceiveStats; }