summaryrefslogtreecommitdiff
path: root/kvmd/apps/vnc/server.py
diff options
context:
space:
mode:
authorMaxim Devaev <[email protected]>2022-08-05 18:19:31 +0300
committerMaxim Devaev <[email protected]>2022-08-05 18:19:31 +0300
commitd21e74700a5b236ea19981ff74724790a8bc4efc (patch)
tree9bda87884ece795b05a81bfc4863b4562e84d9ca /kvmd/apps/vnc/server.py
parenteeaeebf7c76385536eb8f5daaea5f21bda18b735 (diff)
shielded some tasks
Diffstat (limited to 'kvmd/apps/vnc/server.py')
-rw-r--r--kvmd/apps/vnc/server.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/kvmd/apps/vnc/server.py b/kvmd/apps/vnc/server.py
index 2f822ab9..54974bfb 100644
--- a/kvmd/apps/vnc/server.py
+++ b/kvmd/apps/vnc/server.py
@@ -147,9 +147,12 @@ class _Client(RfbClient): # pylint: disable=too-many-instance-attributes
fb_sender=self.__fb_sender_task_loop(),
)
finally:
- if self.__kvmd_session:
- await self.__kvmd_session.close()
- self.__kvmd_session = None
+ await asyncio.shield(self.__cleanup())
+
+ async def __cleanup(self) -> None:
+ if self.__kvmd_session:
+ await self.__kvmd_session.close()
+ self.__kvmd_session = None
# =====
@@ -446,6 +449,10 @@ class VncServer: # pylint: disable=too-many-instance-attributes
shared_params = _SharedParams()
+ async def cleanup_client(writer: asyncio.StreamWriter) -> None:
+ if (await aiotools.close_writer(writer)):
+ get_logger(0).info("%s [entry]: Connection is closed in an emergency", rfb_format_remote(writer))
+
async def handle_client(reader: asyncio.StreamReader, writer: asyncio.StreamWriter) -> None:
logger = get_logger(0)
remote = rfb_format_remote(writer)
@@ -491,8 +498,7 @@ class VncServer: # pylint: disable=too-many-instance-attributes
except Exception:
logger.exception("%s [entry]: Unhandled exception in client task", remote)
finally:
- if (await aiotools.close_writer(writer)):
- logger.info("%s [entry]: Connection is closed in an emergency", remote)
+ await asyncio.shield(cleanup_client(writer))
self.__handle_client = handle_client