History

Check thread validity after event processing

Zach Pomerantz committed 10 years ago

Commit c480dcf1 parent 1c5e1bb1 file · +11 −7Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 1 file). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+11−7
@@ -294,13 +294,6 @@ void ScriptEngine::waitTillDoneRunning() { · 293 unmodified lines
294 294
295 auto startedWaiting = usecTimestampNow();295 auto startedWaiting = usecTimestampNow();
296 while (workerThread->isRunning()) {296 while (workerThread->isRunning()) {
297 // NOTE: This will be called on the main application thread from stopAllScripts.
298 // The application thread will need to continue to process events, because
299 // the scripts will likely need to marshall messages across to the main thread, e.g.
300 // if they access Settings or Menu in any of their shutdown code. So:
301 // Process events for the main application thread, allowing invokeMethod calls to pass between threads.
302 QCoreApplication::processEvents();
303
304 // If the final evaluation takes too long, then tell the script engine to stop running297 // If the final evaluation takes too long, then tell the script engine to stop running
305 auto elapsedUsecs = usecTimestampNow() - startedWaiting;298 auto elapsedUsecs = usecTimestampNow() - startedWaiting;
306 static const auto MAX_SCRIPT_EVALUATION_TIME = USECS_PER_SECOND;299 static const auto MAX_SCRIPT_EVALUATION_TIME = USECS_PER_SECOND;
@@ -326,6 +319,17 @@ void ScriptEngine::waitTillDoneRunning() { · 19 unmodified lines
326 }319 }
327 }320 }
328 321
322 // NOTE: This will be called on the main application thread from stopAllScripts.
323 // The application thread will need to continue to process events, because
324 // the scripts will likely need to marshall messages across to the main thread, e.g.
325 // if they access Settings or Menu in any of their shutdown code. So:
326 // Process events for the main application thread, allowing invokeMethod calls to pass between threads.
327 QCoreApplication::processEvents();
328 // In some cases (debugging), processEvents may give the thread enough time to shut down, so recheck it.
329 if (!thread()) {
330 break;
331 }
332
329 // Avoid a pure busy wait333 // Avoid a pure busy wait
330 QThread::yieldCurrentThread();334 QThread::yieldCurrentThread();
331 }335 }