History

Revert "Revert "NOT MERGEABLE: graceful cleanup on Application dtor for NodeList""

This reverts commit 9269b2a0b2ae9d05abf721f32b3f3f91ad844b16.

Stephen Birarda committed 11 years ago

Commit 7bfc7471 parent 278813e6 files · +27 −34Browse files

Showing the changes to interface/src/Application.cpp (1 of 6 files). Show all

Unified · Split

interface/src/Application.cpp+18−22
@@ -146,7 +146,6 @@ const qint64 MAXIMUM_CACHE_SIZE = 10 * BYTES_PER_GIGABYTES; // 10GB · 145 unmodified lines
146146
147147 static QTimer* locationUpdateTimer = NULL;
148148 static QTimer* balanceUpdateTimer = NULL;
149−static QTimer* silentNodeTimer = NULL;
150149 static QTimer* identityPacketTimer = NULL;
151150 static QTimer* billboardPacketTimer = NULL;
152151 static QTimer* checkFPStimer = NULL;
@@ -258,7 +257,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 105 unmodified lines
258257 _dependencyManagerIsSetup(setupEssentials(argc, argv)),
259258 _window(new MainWindow(desktop())),
260259 _toolWindow(NULL),
261− _nodeThread(new QThread(this)),
262260 _datagramProcessor(),
263261 _undoStack(),
264262 _undoStackScriptingInterface(&_undoStack),
@@ -329,18 +327,20 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 64 unmodified lines
329327 _runningScriptsWidget = new RunningScriptsWidget(_window);
330328
331329 // start the nodeThread so its event loop is running
332− _nodeThread->setObjectName("Datagram Processor Thread");
333− _nodeThread->start();
330+ QThread* nodeThread = new QThread(this);
331+ nodeThread->setObjectName("Datagram Processor Thread");
332+ nodeThread->start();
334333
335334 // make sure the node thread is given highest priority
336− _nodeThread->setPriority(QThread::TimeCriticalPriority);
335+ nodeThread->setPriority(QThread::TimeCriticalPriority);
336+
337+ _datagramProcessor = new DatagramProcessor(nodeList.data());
337338
338339 // put the NodeList and datagram processing on the node thread
339− nodeList->moveToThread(_nodeThread);
340− _datagramProcessor.moveToThread(_nodeThread);
340+ nodeList->moveToThread(nodeThread);
341341
342342 // connect the DataProcessor processDatagrams slot to the QUDPSocket readyRead() signal
343− connect(&nodeList->getNodeSocket(), SIGNAL(readyRead()), &_datagramProcessor, SLOT(processDatagrams()));
343+ connect(&nodeList->getNodeSocket(), &QUdpSocket::readyRead, _datagramProcessor, &DatagramProcessor::processDatagrams);
344344
345345 // put the audio processing on a separate thread
346346 QThread* audioThread = new QThread();
@@ -427,12 +427,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 80 unmodified lines
427427 // connect to the packet sent signal of the _entityEditSender
428428 connect(&_entityEditSender, &EntityEditPacketSender::packetSent, this, &Application::packetSent);
429429
430− // move the silentNodeTimer to the _nodeThread
431− silentNodeTimer = new QTimer();
432− connect(silentNodeTimer, SIGNAL(timeout()), nodeList.data(), SLOT(removeSilentNodes()));
433− silentNodeTimer->start(NODE_SILENCE_THRESHOLD_MSECS);
434− silentNodeTimer->moveToThread(_nodeThread);
435−
436430 // send the identity packet for our avatar each second to our avatar mixer
437431 identityPacketTimer = new QTimer();
438432 connect(identityPacketTimer, &QTimer::timeout, _myAvatar, &MyAvatar::sendIdentityPacket);
@@ -547,7 +541,7 @@ void Application::aboutToQuit() { · 108 unmodified lines
547541 }
548542
549543 void Application::cleanupBeforeQuit() {
550− _datagramProcessor.shutdown(); // tell the datagram processor we're shutting down, so it can short circuit
544+ _datagramProcessor->shutdown(); // tell the datagram processor we're shutting down, so it can short circuit
551545 _entities.shutdown(); // tell the entities system we're shutting down, so it will stop running scripts
552546 ScriptEngine::stopAllScripts(this); // stop all currently running global scripts
553547
@@ -555,7 +549,6 @@ void Application::cleanupBeforeQuit() { · 1 unmodified line
555549 // depending on what thread they run in
556550 locationUpdateTimer->stop();
557551 balanceUpdateTimer->stop();
558− QMetaObject::invokeMethod(silentNodeTimer, "stop", Qt::BlockingQueuedConnection);
559552 identityPacketTimer->stop();
560553 billboardPacketTimer->stop();
561554 checkFPStimer->stop();
@@ -565,7 +558,6 @@ void Application::cleanupBeforeQuit() { · 3 unmodified lines
565558 // and then delete those that got created by "new"
566559 delete locationUpdateTimer;
567560 delete balanceUpdateTimer;
568− delete silentNodeTimer;
569561 delete identityPacketTimer;
570562 delete billboardPacketTimer;
571563 delete checkFPStimer;
@@ -597,10 +589,6 @@ Application::~Application() { · 25 unmodified lines
597589 tree->lockForWrite();
598590 _entities.getTree()->setSimulation(NULL);
599591 tree->unlock();
600−
601− // ask the datagram processing thread to quit and wait until it is done
602− _nodeThread->quit();
603− _nodeThread->wait();
604592
605593 _octreeProcessor.terminate();
606594 _entityEditSender.terminate();
@@ -620,6 +608,14 @@ Application::~Application() { · 13 unmodified lines
620608 DependencyManager::destroy<GeometryCache>();
621609 //DependencyManager::destroy<ScriptCache>();
622610 DependencyManager::destroy<SoundCache>();
611+
612+ auto nodeList = DependencyManager::get<NodeList>();
613+ QThread* nodeThread = nodeList->thread();
614+ nodeList->deleteLater();
615+
616+ // ask the node thread to quit and wait until it is done
617+ nodeThread->quit();
618+ nodeThread->wait();
623619
624620 qInstallMessageHandler(NULL); // NOTE: Do this as late as possible so we continue to get our log messages
625621 }
@@ -1498,7 +1494,7 @@ void Application::checkFPS() { · 872 unmodified lines
14981494
14991495 _fps = (float)_frameCount / diffTime;
15001496 _frameCount = 0;
1501− _datagramProcessor.resetCounters();
1497+ _datagramProcessor->resetCounters();
15021498 _timerStart.start();
15031499
15041500 // ask the node list to check in with the domain server

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t