From 52658cfc9c93429e811b40e2afc2411f259c6f06 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Mon, 4 Jun 2018 13:20:36 +0900 Subject: [PATCH] Set the shutdown event via call_soon Fixes #480 Require aiorpcx 0.5.6, handle ConnectionError appropriately; this ensures the same bug would give a better error message --- server/controller.py | 2 +- server/peers.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/controller.py b/server/controller.py index 41dc9c1..e609abd 100644 --- a/server/controller.py +++ b/server/controller.py @@ -591,7 +591,7 @@ class Controller(ServerBase): def rpc_stop(self): '''Shut down the server cleanly.''' - self.shutdown_event.set() + self.loop.call_soon(self.shutdown_event.set) return 'stopping' def rpc_getinfo(self): diff --git a/server/peers.py b/server/peers.py index c7a6a96..aa16b05 100644 --- a/server/peers.py +++ b/server/peers.py @@ -16,7 +16,7 @@ import time from collections import defaultdict, Counter from functools import partial -from aiorpcx import ClientSession, RPCError, SOCKSProxy +from aiorpcx import ClientSession, RPCError, SOCKSProxy, ConnectionError from lib.peer import Peer from lib.util import ConnectionLogger @@ -73,7 +73,7 @@ class PeerSession(ClientSession): def is_good(self, request, instance): try: result = request.result() - except asyncio.CancelledError: + except (asyncio.CancelledError, ConnectionError): return False except asyncio.TimeoutError as e: self.fail(request, str(e))