History

fix crash on shutdown of interface

ZappoMan committed 12 years ago

Commit 5560a0f1 parent 9de99ce2 files · +20 −10Browse files

Showing the changes to libraries/octree/src/OctreeScriptingInterface.cpp (1 of 2 files). Show all

Unified · Split

libraries/octree/src/OctreeScriptingInterface.cpp+17−10
@@ -6,6 +6,8 @@ · 5 unmodified lines
66 // Copyright (c) 2013 HighFidelity, Inc. All rights reserved.
77 //
88
9+#include <QCoreApplication>
10+
911 #include "OctreeScriptingInterface.h"
1012
1113 OctreeScriptingInterface::OctreeScriptingInterface(OctreeEditPacketSender* packetSender,
@@ -16,18 +18,21 @@ OctreeScriptingInterface::OctreeScriptingInterface(OctreeEditPacketSender* packe · 4 unmodified lines
1618 }
1719
1820 OctreeScriptingInterface::~OctreeScriptingInterface() {
19− //printf("OctreeScriptingInterface::~OctreeScriptingInterface()\n");
21+ cleanupManagedObjects();
22+}
23+
24+void OctreeScriptingInterface::cleanupManagedObjects() {
2025 if (_managedJurisdictionListener) {
21− //printf("OctreeScriptingInterface::~OctreeScriptingInterface() _managedJurisdictionListener... _jurisdictionListener->terminate()\n");
2226 _jurisdictionListener->terminate();
23− //printf("OctreeScriptingInterface::~OctreeScriptingInterface() _managedJurisdictionListener... deleting _jurisdictionListener\n");
24− delete _jurisdictionListener;
27+ _jurisdictionListener->deleteLater();
28+ _managedJurisdictionListener = false;
29+ _jurisdictionListener = NULL;
2530 }
2631 if (_managedPacketSender) {
27− //printf("OctreeScriptingInterface::~OctreeScriptingInterface() _managedJurisdictionListener... _packetSender->terminate()\n");
2832 _packetSender->terminate();
29− //printf("OctreeScriptingInterface::~OctreeScriptingInterface() _managedPacketSender... deleting _packetSender\n");
30− delete _packetSender;
33+ _packetSender->deleteLater();
34+ _managedPacketSender = false;
35+ _packetSender = NULL;
3136 }
3237 }
3338
@@ -40,13 +45,11 @@ void OctreeScriptingInterface::setJurisdictionListener(JurisdictionListener* jur · 6 unmodified lines
4045 }
4146
4247 void OctreeScriptingInterface::init() {
43− //printf("OctreeScriptingInterface::init()\n");
4448 if (_jurisdictionListener) {
4549 _managedJurisdictionListener = false;
4650 } else {
4751 _managedJurisdictionListener = true;
4852 _jurisdictionListener = new JurisdictionListener(getServerNodeType());
49− //qDebug("OctreeScriptingInterface::init() _managedJurisdictionListener=true, creating _jurisdictionListener=%p", _jurisdictionListener);
5053 _jurisdictionListener->initialize(true);
5154 }
5255
@@ -55,7 +58,11 @@ void OctreeScriptingInterface::init() { · 2 unmodified lines
5558 } else {
5659 _managedPacketSender = true;
5760 _packetSender = createPacketSender();
58− //qDebug("OctreeScriptingInterface::init() _managedPacketSender=true, creating _packetSender=%p", _packetSender);
5961 _packetSender->setServerJurisdictions(_jurisdictionListener->getJurisdictions());
6062 }
63+
64+ if (QCoreApplication::instance()) {
65+ connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(cleanupManagedObjects()));
66+ }
67+
6168 }