()
| 602 | }, |
| 603 | |
| 604 | async stop(): Promise<void> { |
| 605 | if (disposed) return; |
| 606 | if (fatal !== null) throw fatal; |
| 607 | if (!started) return; |
| 608 | if (stopDef !== null) { |
| 609 | await stopDef.promise; |
| 610 | return; |
| 611 | } |
| 612 | |
| 613 | stopDef = deferred<void>(); |
| 614 | stopSettled = false; |
| 615 | stopRequested = true; |
| 616 | clearPollLoop(); |
| 617 | |
| 618 | const stopErr = new Error("NodeBackend(inline): stopped"); |
| 619 | while (eventWaiters.length > 0) eventWaiters.shift()?.reject(stopErr); |
| 620 | eventQueue = []; |
| 621 | |
| 622 | if (engineId !== null && native !== null) { |
| 623 | try { |
| 624 | native.engineDestroy(engineId); |
| 625 | } catch { |
| 626 | // best effort on stop |
| 627 | } |
| 628 | } |
| 629 | engineId = null; |
| 630 | started = false; |
| 631 | |
| 632 | if (!stopSettled && stopDef !== null) { |
| 633 | stopSettled = true; |
| 634 | stopDef.resolve(); |
| 635 | } |
| 636 | await stopDef.promise; |
| 637 | stopDef = null; |
| 638 | }, |
| 639 | |
| 640 | dispose(): void { |
| 641 | if (disposed) return; |
nothing calls this directly
no test coverage detected