mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-30 03:14:22 +00:00
parent
69aa5a0d2f
commit
1f6635c1fc
@ -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):
|
||||
"""
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user