Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upFix KeyboardInterrupt handling logic. #296
Merged
Conversation
When uvloop is run in the main thread we *always* want to set up a self-pipe and a signal wakeup FD. That's the only way how libuv can be notified that a ^C happened and break away from selecting on sockets. asyncio does not need to do that, as the 'selectors' module it uses is already aware of the way Python implements ^C handling. This translates to a slightly different behavior between asyncio & uvloop: 1. uvloop needs to always call signal.set_wakeup_fd() when run in the main thread; 2. asyncio only needs to call signal.set_wakeup_fd() when a user registers a signal handler. (2) means that if the user had not set up any signals, the signal wakeup FD stays the same between different asyncio runs. This commit fixes uvloop signal implementation to make sure that uvloop behaves the same way as asyncio in regards to signal wakeup FD between the loop runs. It also ensures that uvloop always have a proper self-pipe set up so that ^C is always supported when it is run in the main thread. Issue #295.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
1st1 commentedOct 28, 2019
When uvloop is run in the main thread we always want to set up a
self-pipe and a signal wakeup FD. That's the only way how libuv
can be notified that a ^C happened and break away from selecting
on sockets.
asyncio does not need to do that, as the 'selectors' module it uses
is already aware of the way Python implements ^C handling.
This translates to a slightly different behavior between asyncio &
uvloop:
uvloop needs to always call signal.set_wakeup_fd() when run in the
main thread;
asyncio only needs to call signal.set_wakeup_fd() when a user
registers a signal handler.
(2) means that if the user had not set up any signals, the signal
wakeup FD stays the same between different asyncio runs. This commit
fixes uvloop signal implementation to make sure that uvloop behaves
the same way as asyncio in regards to signal wakeup FD between the
loop runs. It also ensures that uvloop always have a proper
self-pipe set up so that ^C is always supported when it is run in
the main thread.
Issue #295.