From e68debc94e32ec9a2a67fd6f4026a10c2ea2639d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 17 Nov 2021 11:45:15 +0530 Subject: [PATCH] Handle blocking io errors when writing all to an fd --- kitty/utils.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kitty/utils.py b/kitty/utils.py index 3f9233589..a99b20104 100644 --- a/kitty/utils.py +++ b/kitty/utils.py @@ -430,11 +430,16 @@ def parse_address_spec(spec: str) -> Tuple[AddressFamily, Union[Tuple[str, int], return family, address, socket_path -def write_all(fd: int, data: Union[str, bytes]) -> None: +def write_all(fd: int, data: Union[str, bytes], block_until_written: bool = True) -> None: if isinstance(data, str): data = data.encode('utf-8') while data: - n = os.write(fd, data) + try: + n = os.write(fd, data) + except BlockingIOError: + if not block_until_written: + raise + continue if not n: break data = data[n:]