diff --git a/jsonrpyc/__init__.py b/jsonrpyc/__init__.py index daaa64f..cb30b2f 100644 --- a/jsonrpyc/__init__.py +++ b/jsonrpyc/__init__.py @@ -713,9 +713,12 @@ def run(self) -> None: # handle new lines if any if lines: for b_line in lines: - line = b_line.decode("utf-8").strip() - if line: - self.rpc._handle(line) + if not b_line: + self.stop() + else: + line = b_line.decode("utf-8").strip() + if line: + self.rpc._handle(line) else: self._stop.wait(self.interval) diff --git a/tests/test_rpc.py b/tests/test_rpc.py index 2250ce4..71bb1d9 100644 --- a/tests/test_rpc.py +++ b/tests/test_rpc.py @@ -8,6 +8,7 @@ import os import unittest from subprocess import Popen, PIPE +from time import sleep import jsonrpyc @@ -26,11 +27,26 @@ def __init__(self, *args, **kwargs): self.rpc = jsonrpyc.RPC(stdout=self.p.stdin, stdin=self.p.stdout) def __del__(self): - self.p.stdin.close() - self.p.stdout.close() + try: + self.p.stdin.close() + except OSError: + pass + try: + self.p.stdout.close() + except OSError: + pass self.p.terminate() self.p.wait() + def test_orphan_exits(self): + self.p.terminate() + self.p.wait(timeout=1) + for _ in range(5): + if self.rpc.watchdog._stop.is_set(): + break + sleep(0.05) + self.assertTrue(self.rpc.watchdog._stop.is_set()) + def test_request_wo_args(self): def cb(err, one): self.assertEqual(err, None)