Merge pull request #3172 from mhils/issue-3133

Fix shutdown on Windows
This commit is contained in:
Maximilian Hils 2018-05-28 23:29:08 +02:00 committed by GitHub
commit 7d3d4ca9ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 5 deletions

View File

@ -119,7 +119,15 @@ class Master:
"""
if not self.should_exit.is_set():
self.should_exit.set()
asyncio.run_coroutine_threadsafe(self._shutdown(), loop = self.channel.loop)
ret = asyncio.run_coroutine_threadsafe(self._shutdown(), loop=self.channel.loop)
# Weird band-aid to make sure that self._shutdown() is actually executed,
# which otherwise hangs the process as the proxy server is threaded.
# This all needs to be simplified when the proxy server runs on asyncio as well.
if not self.channel.loop.is_running(): # pragma: no cover
try:
self.channel.loop.run_until_complete(asyncio.wrap_future(ret))
except RuntimeError:
pass # Event loop stopped before Future completed.
def _change_reverse_host(self, f):
"""

View File

@ -119,9 +119,6 @@ def run(
if extra:
opts.update(**extra(args))
def cleankill(*args, **kwargs):
master.shutdown()
signal.signal(signal.SIGTERM, cleankill)
loop = asyncio.get_event_loop()
for signame in ('SIGINT', 'SIGTERM'):
try:
@ -129,6 +126,15 @@ def run(
except NotImplementedError:
# Not supported on Windows
pass
# Make sure that we catch KeyboardInterrupts on Windows.
# https://stackoverflow.com/a/36925722/934719
if os.name == "nt":
async def wakeup():
while True:
await asyncio.sleep(0.2)
asyncio.ensure_future(wakeup())
master.run()
except exceptions.OptionsError as e:
print("%s: %s" % (sys.argv[0], e), file=sys.stderr)

View File

@ -787,7 +787,7 @@ class TestServerConnect(tservers.HTTPProxyTest):
"""A replayed/fake response with no upstream_cert should not connect to an upstream server"""
self.set_addons(AFakeResponse())
assert self.pathod("200").status_code == 200
asyncio.sleep(0.1)
await asyncio.sleep(0.1)
assert not self.proxy.tmaster.has_log("serverconnect")