mirror of
				https://github.com/Rapptz/discord.py.git
				synced 2025-10-25 10:32:59 +00:00 
			
		
		
		
	Fix cleanup code on Linux not working properly.
This commit is contained in:
		| @@ -62,8 +62,21 @@ def _cancel_tasks(loop, tasks): | ||||
|     log.info('Cleaning up after %d tasks.', len(tasks)) | ||||
|     gathered = asyncio.gather(*tasks, loop=loop, return_exceptions=True) | ||||
|     gathered.cancel() | ||||
|     gathered.add_done_callback(lambda fut: loop.stop()) | ||||
|  | ||||
|     def stop_and_silence(fut): | ||||
|         loop.stop() | ||||
|         try: | ||||
|             fut.result() | ||||
|         except asyncio.CancelledError: | ||||
|             pass | ||||
|         except Exception as e: | ||||
|             loop.call_exception_handler({ | ||||
|                 'message': 'Unhandled exception during Client.run shutdown.', | ||||
|                 'exception': e, | ||||
|                 'future': fut | ||||
|             }) | ||||
|  | ||||
|     gathered.add_done_callback(stop_and_silence) | ||||
|     while not gathered.done(): | ||||
|         loop.run_forever() | ||||
|  | ||||
| @@ -501,10 +514,6 @@ class Client: | ||||
|         if loop.is_closed(): | ||||
|             return # we're already cleaning up | ||||
|  | ||||
|         # Stop the event loop if it's running | ||||
|         if loop.is_running(): | ||||
|             loop.stop() | ||||
|  | ||||
|         task = asyncio.ensure_future(self.close(), loop=loop) | ||||
|  | ||||
|         def stop_loop(fut): | ||||
| @@ -554,8 +563,8 @@ class Client: | ||||
|         is_windows = sys.platform == 'win32' | ||||
|         loop = self.loop | ||||
|         if not is_windows: | ||||
|             loop.add_signal_handler(signal.SIGINT, self._do_cleanup) | ||||
|             loop.add_signal_handler(signal.SIGTERM, self._do_cleanup) | ||||
|             loop.add_signal_handler(signal.SIGINT, lambda: loop.stop()) | ||||
|             loop.add_signal_handler(signal.SIGTERM, lambda: loop.stop()) | ||||
|  | ||||
|         future = asyncio.ensure_future(self.start(*args, **kwargs), loop=loop) | ||||
|         future.add_done_callback(lambda f: loop.stop()) | ||||
| @@ -565,8 +574,7 @@ class Client: | ||||
|         except KeyboardInterrupt: | ||||
|             log.info('Received signal to terminate bot and event loop.') | ||||
|         finally: | ||||
|             if is_windows: | ||||
|                 self._do_cleanup() | ||||
|             self._do_cleanup() | ||||
|  | ||||
|     # properties | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user