From f9f597ef01e1cc34c780d5ef385085657851e0fe Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Sat, 1 Jun 2024 13:07:55 -0700 Subject: [PATCH] server: guard entire plugin load block --- server/src/runtime.ts | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/server/src/runtime.ts b/server/src/runtime.ts index 67c3637a82..714e0cca10 100644 --- a/server/src/runtime.ts +++ b/server/src/runtime.ts @@ -12,7 +12,6 @@ import net from 'net'; import path from 'path'; import { ParsedQs } from 'qs'; import semver from 'semver'; -import { PassThrough } from 'stream'; import { Parser as TarParser } from 'tar'; import { URL } from "url"; import WebSocket, { Server as WebSocketServer } from "ws"; @@ -33,6 +32,7 @@ import { PluginHost } from './plugin/plugin-host'; import { isConnectionUpgrade, PluginHttp } from './plugin/plugin-http'; import { WebSocketConnection } from './plugin/plugin-remote-websocket'; import { getPluginVolume } from './plugin/plugin-volume'; +import { CustomRuntimeWorker } from './plugin/runtime/custom-worker'; import { NodeForkWorker } from './plugin/runtime/node-fork-worker'; import { PythonRuntimeWorker } from './plugin/runtime/python-worker'; import { RuntimeWorker, RuntimeWorkerOptions } from './plugin/runtime/runtime-worker'; @@ -46,7 +46,6 @@ import { getNpmPackageInfo, PluginComponent } from './services/plugin'; import { ServiceControl } from './services/service-control'; import { UsersService } from './services/users'; import { getState, ScryptedStateManager, setState } from './state'; -import { CustomRuntimeWorker } from './plugin/runtime/custom-worker'; interface DeviceProxyPair { handler: PluginDeviceProxyHandler; @@ -675,14 +674,14 @@ export class ScryptedRuntime extends PluginHttp { loadPlugin(plugin: Plugin, pluginDebug?: PluginDebug) { const pluginId = plugin._id; - this.killPlugin(pluginId); + try { + this.killPlugin(pluginId); - const pluginDevices = this.findPluginDevices(pluginId); - for (const pluginDevice of pluginDevices) { - this.invalidatePluginDevice(pluginDevice._id); - } + const pluginDevices = this.findPluginDevices(pluginId); + for (const pluginDevice of pluginDevices) { + this.invalidatePluginDevice(pluginDevice._id); + } - try { const pluginHost = new PluginHost(this, plugin, pluginDebug); this.setupPluginHostAutoRestart(pluginHost); this.plugins[pluginId] = pluginHost;