-
Victor Stinner yazdı
There is a race condition in create_connection() used with wait_for() to have a timeout. sock_connect() registers the file descriptor of the socket to be notified of write event (if connect() raises BlockingIOError). When create_connection() is cancelled with a TimeoutError, sock_connect() coroutine gets the exception, but it doesn't unregister the file descriptor for write event. create_connection() gets the TimeoutError and closes the socket. If you call again create_connection(), the new socket will likely gets the same file descriptor, which is still registered in the selector. When sock_connect() calls add_writer(), it tries to modify the entry instead of creating a new one. This issue was originally reported in the Trollius project, but the bug comes from Tulip in fact (Trollius is based on Tulip): https://bitbucket.org/enovance/trollius/issue/15/after-timeouterror-on-wait_for This change fixes the race condition. It also makes sock_connect() more reliable (and portable) is sock.connect() raises an InterruptedError.
d5aeccf9
Adı |
Son kayıt (commit)
|
Son güncelleme |
---|---|---|
Doc | ||
Grammar | ||
Include | ||
Lib | ||
Mac | ||
Misc | ||
Modules | ||
Objects | ||
PC | ||
PCbuild | ||
Parser | ||
Python | ||
Tools | ||
.bzrignore | ||
.gitignore | ||
.hgeol | ||
.hgignore | ||
.hgtags | ||
.hgtouch | ||
LICENSE | ||
Makefile.pre.in | ||
README | ||
config.guess | ||
config.sub | ||
configure | ||
configure.ac | ||
install-sh | ||
pyconfig.h.in | ||
setup.py |