From 10e98e827e71c7a415e46b633381d56dbb1cc97c Mon Sep 17 00:00:00 2001 From: Daniel Teichmann Date: Thu, 23 Jul 2020 13:52:37 +0200 Subject: Prevent crashing when asking for status with invalid pid & mockup-mode: make sessionid's positive --- service.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'service.py') diff --git a/service.py b/service.py index 1faae4d..4c4e927 100755 --- a/service.py +++ b/service.py @@ -47,14 +47,21 @@ class RWAService(dbus.service.Object): self._update_session(pid) return self._get_status(pid) - @dbus.service.method("org.ArcticaProject.RWA", in_signature="i") + @dbus.service.method("org.ArcticaProject.RWA", in_signature="i", out_signature="s") def stop(self, pid: int): """Stop a remote session.""" - session = self.sessions[pid] + try: + session = self.sessions[pid] + except KeyError: + return json.dumps({"pid": pid, "status": "stopped"}, sort_keys=True) session.stop() + return json.dumps({"id": pid, "status": "stopped"}, sort_keys=True) def _get_status(self, pid: int) -> str: - session = self.sessions[pid] + try: + session = self.sessions[pid] + except KeyError: + return json.dumps({"id": pid, "status": "dead"}, sort_keys=True) return json.dumps(session.status) def _ensure_update_service(self): @@ -65,7 +72,13 @@ class RWAService(dbus.service.Object): def _update_session(self, pid: int): """Update the status of a session.""" - session = self.sessions[pid] + try: + session = self.sessions[pid] + except KeyError: + print(f"Session #{pid}") + print("Session is dead.") + return + print(f"Session #{session.pid}") # Check if VNC process is still running -- cgit v1.2.3