History

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

Stephen Birarda committed 11 years ago

Commit 9269b2a1 parent 4da91866 files · +34 −27Browse files

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

Unified · Split

interface/src/Application.cpp+22−18
@@ -146,6 +146,7 @@ const qint64 MAXIMUM_CACHE_SIZE = 10 * BYTES_PER_GIGABYTES; // 10GB · 145 unmodified lines
146 146
147static QTimer* locationUpdateTimer = NULL;147static QTimer* locationUpdateTimer = NULL;
148static QTimer* balanceUpdateTimer = NULL;148static QTimer* balanceUpdateTimer = NULL;
149static QTimer* silentNodeTimer = NULL;
149static QTimer* identityPacketTimer = NULL;150static QTimer* identityPacketTimer = NULL;
150static QTimer* billboardPacketTimer = NULL;151static QTimer* billboardPacketTimer = NULL;
151static QTimer* checkFPStimer = NULL;152static QTimer* checkFPStimer = NULL;
@@ -257,6 +258,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 105 unmodified lines
257 _dependencyManagerIsSetup(setupEssentials(argc, argv)),258 _dependencyManagerIsSetup(setupEssentials(argc, argv)),
258 _window(new MainWindow(desktop())),259 _window(new MainWindow(desktop())),
259 _toolWindow(NULL),260 _toolWindow(NULL),
261 _nodeThread(new QThread(this)),
260 _datagramProcessor(),262 _datagramProcessor(),
261 _undoStack(),263 _undoStack(),
262 _undoStackScriptingInterface(&_undoStack),264 _undoStackScriptingInterface(&_undoStack),
@@ -327,20 +329,18 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 64 unmodified lines
327 _runningScriptsWidget = new RunningScriptsWidget(_window);329 _runningScriptsWidget = new RunningScriptsWidget(_window);
328 330
329 // start the nodeThread so its event loop is running331 // start the nodeThread so its event loop is running
330 QThread* nodeThread = new QThread(this);332 _nodeThread->setObjectName("Datagram Processor Thread");
331 nodeThread->setObjectName("Datagram Processor Thread");333 _nodeThread->start();
332 nodeThread->start();
333 334
334 // make sure the node thread is given highest priority335 // make sure the node thread is given highest priority
335 nodeThread->setPriority(QThread::TimeCriticalPriority);336 _nodeThread->setPriority(QThread::TimeCriticalPriority);
336
337 _datagramProcessor = new DatagramProcessor(nodeList.data());
338 337
339 // put the NodeList and datagram processing on the node thread338 // put the NodeList and datagram processing on the node thread
340 nodeList->moveToThread(nodeThread);339 nodeList->moveToThread(_nodeThread);
340 _datagramProcessor.moveToThread(_nodeThread);
341 341
342 // connect the DataProcessor processDatagrams slot to the QUDPSocket readyRead() signal342 // connect the DataProcessor processDatagrams slot to the QUDPSocket readyRead() signal
343 connect(&nodeList->getNodeSocket(), &QUdpSocket::readyRead, _datagramProcessor, &DatagramProcessor::processDatagrams);343 connect(&nodeList->getNodeSocket(), SIGNAL(readyRead()), &_datagramProcessor, SLOT(processDatagrams()));
344 344
345 // put the audio processing on a separate thread345 // put the audio processing on a separate thread
346 QThread* audioThread = new QThread();346 QThread* audioThread = new QThread();
@@ -427,6 +427,12 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : · 80 unmodified lines
427 // connect to the packet sent signal of the _entityEditSender427 // connect to the packet sent signal of the _entityEditSender
428 connect(&_entityEditSender, &EntityEditPacketSender::packetSent, this, &Application::packetSent);428 connect(&_entityEditSender, &EntityEditPacketSender::packetSent, this, &Application::packetSent);
429 429
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
430 // send the identity packet for our avatar each second to our avatar mixer436 // send the identity packet for our avatar each second to our avatar mixer
431 identityPacketTimer = new QTimer();437 identityPacketTimer = new QTimer();
432 connect(identityPacketTimer, &QTimer::timeout, _myAvatar, &MyAvatar::sendIdentityPacket);438 connect(identityPacketTimer, &QTimer::timeout, _myAvatar, &MyAvatar::sendIdentityPacket);
@@ -541,7 +547,7 @@ void Application::aboutToQuit() { · 108 unmodified lines
541}547}
542 548
543void Application::cleanupBeforeQuit() {549void Application::cleanupBeforeQuit() {
544 _datagramProcessor->shutdown(); // tell the datagram processor we're shutting down, so it can short circuit550 _datagramProcessor.shutdown(); // tell the datagram processor we're shutting down, so it can short circuit
545 _entities.shutdown(); // tell the entities system we're shutting down, so it will stop running scripts551 _entities.shutdown(); // tell the entities system we're shutting down, so it will stop running scripts
546 ScriptEngine::stopAllScripts(this); // stop all currently running global scripts552 ScriptEngine::stopAllScripts(this); // stop all currently running global scripts
547 553
@@ -549,6 +555,7 @@ void Application::cleanupBeforeQuit() { · 1 unmodified line
549 // depending on what thread they run in555 // depending on what thread they run in
550 locationUpdateTimer->stop();556 locationUpdateTimer->stop();
551 balanceUpdateTimer->stop();557 balanceUpdateTimer->stop();
558 QMetaObject::invokeMethod(silentNodeTimer, "stop", Qt::BlockingQueuedConnection);
552 identityPacketTimer->stop();559 identityPacketTimer->stop();
553 billboardPacketTimer->stop();560 billboardPacketTimer->stop();
554 checkFPStimer->stop();561 checkFPStimer->stop();
@@ -558,6 +565,7 @@ void Application::cleanupBeforeQuit() { · 3 unmodified lines
558 // and then delete those that got created by "new"565 // and then delete those that got created by "new"
559 delete locationUpdateTimer;566 delete locationUpdateTimer;
560 delete balanceUpdateTimer;567 delete balanceUpdateTimer;
568 delete silentNodeTimer;
561 delete identityPacketTimer;569 delete identityPacketTimer;
562 delete billboardPacketTimer;570 delete billboardPacketTimer;
563 delete checkFPStimer;571 delete checkFPStimer;
@@ -589,6 +597,10 @@ Application::~Application() { · 25 unmodified lines
589 tree->lockForWrite();597 tree->lockForWrite();
590 _entities.getTree()->setSimulation(NULL);598 _entities.getTree()->setSimulation(NULL);
591 tree->unlock();599 tree->unlock();
600
601 // ask the datagram processing thread to quit and wait until it is done
602 _nodeThread->quit();
603 _nodeThread->wait();
592 604
593 _octreeProcessor.terminate();605 _octreeProcessor.terminate();
594 _entityEditSender.terminate();606 _entityEditSender.terminate();
@@ -608,14 +620,6 @@ Application::~Application() { · 13 unmodified lines
608 DependencyManager::destroy<GeometryCache>();620 DependencyManager::destroy<GeometryCache>();
609 //DependencyManager::destroy<ScriptCache>();621 //DependencyManager::destroy<ScriptCache>();
610 DependencyManager::destroy<SoundCache>();622 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();
619 623
620 qInstallMessageHandler(NULL); // NOTE: Do this as late as possible so we continue to get our log messages624 qInstallMessageHandler(NULL); // NOTE: Do this as late as possible so we continue to get our log messages
621}625}
@@ -1494,7 +1498,7 @@ void Application::checkFPS() { · 872 unmodified lines
1494 1498
1495 _fps = (float)_frameCount / diffTime;1499 _fps = (float)_frameCount / diffTime;
1496 _frameCount = 0;1500 _frameCount = 0;
1497 _datagramProcessor->resetCounters();1501 _datagramProcessor.resetCounters();
1498 _timerStart.start();1502 _timerStart.start();
1499 1503
1500 // ask the node list to check in with the domain server1504 // 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