summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorAAGaming <aa@mail.catvibers.me>2022-07-15 10:34:47 -0400
committerAAGaming <aa@mail.catvibers.me>2022-07-15 10:34:47 -0400
commit162d1b561b37fa26aab0c37800ffee3dca878b5a (patch)
tree3aaaaadc82d1cd229f45da5ab2590fb601a22926 /backend
parentba824fc921cd31b676a5317e05a92c683eaa7238 (diff)
downloaddecky-loader-162d1b561b37fa26aab0c37800ffee3dca878b5a.tar.gz
decky-loader-162d1b561b37fa26aab0c37800ffee3dca878b5a.zip
fix lockup in _open_socket_if_not_exists, probably fix ci prereleases
Diffstat (limited to 'backend')
-rw-r--r--backend/plugin.py35
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"]