From 39b18fedde4b163c1d5d19e14fc74aff6a67d3d9 Mon Sep 17 00:00:00 2001 From: "Michael \"Z\" Goddard" Date: Tue, 9 Oct 2018 10:45:56 -0400 Subject: [PATCH] stop all removes threads from future execution Stop all does not **stop** all threads. It stops the active thread and removes all other threads from executing in the future. --- src/engine/runtime.js | 8 ++++++-- src/engine/sequencer.js | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/engine/runtime.js b/src/engine/runtime.js index 204cd4633..2892c2c9f 100644 --- a/src/engine/runtime.js +++ b/src/engine/runtime.js @@ -1853,8 +1853,12 @@ class Runtime extends EventEmitter { } } this.targets = newTargets; - // Dispose all threads. - this.threads.forEach(thread => this._stopThread(thread)); + // Dispose of the active thread. + if (this.sequencer.activeThread !== null) { + this._stopThread(this.sequencer.activeThread); + } + // Remove all remaining threads from executing in the next tick. + this.threads = []; } /** diff --git a/src/engine/sequencer.js b/src/engine/sequencer.js index 464cd7489..2e3def54c 100644 --- a/src/engine/sequencer.js +++ b/src/engine/sequencer.js @@ -51,6 +51,8 @@ class Sequencer { * @type {!Runtime} */ this.runtime = runtime; + + this.activeThread = null; } /** @@ -97,8 +99,9 @@ class Sequencer { numActiveThreads = 0; let stoppedThread = false; // Attempt to run each thread one time. - for (let i = 0; i < this.runtime.threads.length; i++) { - const activeThread = this.runtime.threads[i]; + const threads = this.runtime.threads; + for (let i = 0; i < threads.length; i++) { + const activeThread = this.activeThread = threads[i]; // Check if the thread is done so it is not executed. if (activeThread.stack.length === 0 || activeThread.status === Thread.STATUS_DONE) { @@ -165,6 +168,8 @@ class Sequencer { } } + this.activeThread = null; + return doneThreads; }