diff options
| author | AAGaming <aa@mail.catvibers.me> | 2022-07-15 10:34:47 -0400 |
|---|---|---|
| committer | AAGaming <aa@mail.catvibers.me> | 2022-07-15 10:34:47 -0400 |
| commit | 162d1b561b37fa26aab0c37800ffee3dca878b5a (patch) | |
| tree | 3aaaaadc82d1cd229f45da5ab2590fb601a22926 /backend/plugin.py | |
| parent | ba824fc921cd31b676a5317e05a92c683eaa7238 (diff) | |
| download | decky-loader-162d1b561b37fa26aab0c37800ffee3dca878b5a.tar.gz decky-loader-162d1b561b37fa26aab0c37800ffee3dca878b5a.zip | |
fix lockup in _open_socket_if_not_exists, probably fix ci prereleases
Diffstat (limited to 'backend/plugin.py')
| -rw-r--r-- | backend/plugin.py | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/backend/plugin.py b/backend/plugin.py index 11c94a05..0a8a2901 100644 --- a/backend/plugin.py +++ b/backend/plugin.py @@ -78,12 +78,17 @@ class PluginWrapper: async def _open_socket_if_not_exists(self): if not self.reader: - while True: + retries = 0 + while retries < 10: try: self.reader, self.writer = await open_unix_connection(self.socket_addr) - break + return True except: - await sleep(0) + await sleep(2) + retries += 1 + return False + else: + return True def start(self): if self.passive: @@ -95,21 +100,21 @@ class PluginWrapper: if self.passive: return async def _(self): - await self._open_socket_if_not_exists() - self.writer.write((dumps({"stop": True})+"\n").encode("utf-8")) - await self.writer.drain() - self.writer.close() + if await self._open_socket_if_not_exists(): + self.writer.write((dumps({"stop": True})+"\n").encode("utf-8")) + await self.writer.drain() + self.writer.close() get_event_loop().create_task(_(self)) async def execute_method(self, method_name, kwargs): if self.passive: raise RuntimeError("This plugin is passive (aka does not implement main.py)") async with self.method_call_lock: - await self._open_socket_if_not_exists() - self.writer.write( - (dumps({"method": method_name, "args": kwargs})+"\n").encode("utf-8")) - await self.writer.drain() - res = loads((await self.reader.readline()).decode("utf-8")) - if not res["success"]: - raise Exception(res["res"]) - return res["res"] + if await self._open_socket_if_not_exists(): + self.writer.write( + (dumps({"method": method_name, "args": kwargs})+"\n").encode("utf-8")) + await self.writer.drain() + res = loads((await self.reader.readline()).decode("utf-8")) + if not res["success"]: + raise Exception(res["res"]) + return res["res"] |
