summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarios <marios8543@gmail.com>2022-04-29 21:51:01 +0300
committermarios <marios8543@gmail.com>2022-04-29 21:51:01 +0300
commit89ecca7c30f3898e4b772b7c9786fa58e5bb4ada (patch)
tree1b36c97b8484cd22860e8d7289aca7466c59e53b
parent7d74e98f4f8a47daac85b5de1ef6aa29a1637c06 (diff)
downloaddecky-loader-89ecca7c30f3898e4b772b7c9786fa58e5bb4ada.tar.gz
decky-loader-89ecca7c30f3898e4b772b7c9786fa58e5bb4ada.zip
Fixed callsign debug bug, Fixed process spawn and termination bugv1.2.2
-rw-r--r--plugin_loader/loader.py4
-rw-r--r--plugin_loader/plugin.py8
2 files changed, 9 insertions, 3 deletions
diff --git a/plugin_loader/loader.py b/plugin_loader/loader.py
index f060b5b6..fea5f149 100644
--- a/plugin_loader/loader.py
+++ b/plugin_loader/loader.py
@@ -58,6 +58,7 @@ class Loader:
self.logger.info(f"plugin_path: {self.plugin_path}")
self.plugins = {}
self.callsigns = {}
+ self.callsign_matches = {}
self.import_plugins()
if live_reload:
@@ -85,13 +86,14 @@ class Loader:
else:
self.plugins[plugin.name].stop()
self.plugins.pop(plugin.name, None)
- self.callsigns.pop(plugin.callsign, None)
+ self.callsigns.pop(self.callsign_matches[file], None)
if plugin.passive:
self.logger.info(f"Plugin {plugin.name} is passive")
callsign = str(time())
plugin.callsign = callsign
self.plugins[plugin.name] = plugin.start()
self.callsigns[callsign] = plugin
+ self.callsign_matches[file] = callsign
self.logger.info(f"Loaded {plugin.name}")
except Exception as e:
self.logger.error(f"Could not load {file}. {e}")
diff --git a/plugin_loader/plugin.py b/plugin_loader/plugin.py
index 88857797..30626058 100644
--- a/plugin_loader/plugin.py
+++ b/plugin_loader/plugin.py
@@ -2,8 +2,10 @@ from importlib.util import spec_from_file_location, module_from_spec
from asyncio import get_event_loop, new_event_loop, set_event_loop, start_unix_server, open_unix_connection, sleep, Lock
from os import path, setuid
from json import loads, dumps, load
-from concurrent.futures import ProcessPoolExecutor
from time import time
+from multiprocessing import Process
+from signal import signal, SIGINT
+from sys import exit
class PluginWrapper:
def __init__(self, file, plugin_directory, plugin_path) -> None:
@@ -25,6 +27,8 @@ class PluginWrapper:
self.passive = not path.isfile(self.file)
def _init(self):
+ signal(SIGINT, lambda s, f: exit(0))
+
set_event_loop(new_event_loop())
if self.passive:
return
@@ -73,7 +77,7 @@ class PluginWrapper:
def start(self):
if self.passive:
return self
- ProcessPoolExecutor().submit(self._init, self)
+ Process(target=self._init).start()
return self
def stop(self):