Skip to content

Don't rely on an internal flag#10

Open
takluyver wants to merge 5 commits intopalaviv:developfrom
takluyver:no-flag
Open

Don't rely on an internal flag#10
takluyver wants to merge 5 commits intopalaviv:developfrom
takluyver:no-flag

Conversation

@takluyver
Copy link

This fixes #2 (I hope :-), a race condition between changing the flag value and updating the operating system eventfd/pipe/socket. Rather than trying to always update them together using a lock, this drops the flag, and uses the operating system whenever we want to query or update the event state.

This also means that an EventFD object can be used reliably between processes - child processes will share the operating system state but they would each have their own _flag value.

Non-blocking FDs are used so it doesn't hang if multiple threads/processes try to set or clear the same event.

@takluyver
Copy link
Author

The remaining failures are all on Python 2.7 because it doesn't have the selectors module (and almost certainly other issues). It's all fixable if you really want, but there are a lot of little niceties in recent versions of Python, and we're a year past the end of life for 2.7 now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Race condition in "set" can lead to a bad state

1 participant