From 7e2d355b56b2cc0cc594151b210e9f4bdfb7d410 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 23 Feb 2015 11:40:30 -0800 Subject: [PATCH] first cut at properly shutting down timers while shutting down scripts --- libraries/script-engine/src/ScriptEngine.cpp | 14 ++++++++++++++ libraries/script-engine/src/ScriptEngine.h | 1 + 2 files changed, 15 insertions(+) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index 17237d7843..0919dc5d59 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -535,6 +535,9 @@ void ScriptEngine::run() { } lastUpdate = now; } + + stopAllTimers(); // make sure all our timers are stopped if the script is ending + emit scriptEnding(); // kill the avatar identity timer @@ -564,6 +567,17 @@ void ScriptEngine::run() { emit doneRunning(); } +// NOTE: This is private because it must be called on the same thread that created the timers, which is why +// we want to only call it in our own run "shutdown" processing. +void ScriptEngine::stopAllTimers() { + QMutableHashIterator i(_timerFunctionMap); + while (i.hasNext()) { + i.next(); + QTimer* timer = i.key(); + stopTimer(timer); + } +} + void ScriptEngine::stop() { _isFinished = true; emit runningStateChanged(); diff --git a/libraries/script-engine/src/ScriptEngine.h b/libraries/script-engine/src/ScriptEngine.h index ab32f2c0a5..8963a1e0f6 100644 --- a/libraries/script-engine/src/ScriptEngine.h +++ b/libraries/script-engine/src/ScriptEngine.h @@ -141,6 +141,7 @@ protected: int _numAvatarSoundSentBytes; private: + void stopAllTimers(); void sendAvatarIdentityPacket(); void sendAvatarBillboardPacket();