diff --git a/src/browser/starter.js b/src/browser/starter.js index 43266088..5e1f4209 100644 --- a/src/browser/starter.js +++ b/src/browser/starter.js @@ -698,16 +698,28 @@ V86Starter.prototype.run = async function() */ V86Starter.prototype.stop = async function() { - this.bus.send("cpu-stop"); + if(!this.cpu_is_running) + { + return; + } + + await new Promise(resolve => { + const listener = () => { + this.remove_listener("emulator-stopped", listener); + resolve(); + }; + this.add_listener("emulator-stopped", listener); + this.bus.send("cpu-stop"); + }); }; /** * @ignore * @export */ -V86Starter.prototype.destroy = function() +V86Starter.prototype.destroy = async function() { - this.stop(); + await this.stop(); this.v86.destroy(); this.keyboard_adapter && this.keyboard_adapter.destroy(); diff --git a/src/main.js b/src/main.js index d98d9b56..d8af2103 100644 --- a/src/main.js +++ b/src/main.js @@ -10,7 +10,7 @@ function v86(bus, wasm) this.running = false; /** @type {boolean} */ - this.stopped = false; + this.stopping = false; this.tick_counter = 0; this.worker = null; @@ -29,7 +29,7 @@ function v86(bus, wasm) v86.prototype.run = function() { - this.stopped = false; + this.stopping = false; if(!this.running) { @@ -42,9 +42,9 @@ v86.prototype.run = function() v86.prototype.do_tick = function() { - if(this.stopped || !this.running) + if(this.stopping || !this.running) { - this.stopped = this.running = false; + this.stopping = this.running = false; this.bus.send("emulator-stopped"); return; } @@ -74,7 +74,7 @@ v86.prototype.stop = function() { if(this.running) { - this.stopped = true; + this.stopping = true; } };