bpo-30980: Fix double close in asyncore.file_wrapper (#2789) (#2898)

* bpo-30980: Fix close test to fail

test_close_twice was not considering the fact that file_wrapper is
duping the file descriptor. Closing the original descriptor left the
duped one open, hiding the fact that close protection is not effective.

* bpo-30980: Fix double close protection

Invalidated self.fd before closing, handling correctly the case when
os.close raises.

* bpo-30980: Fix fd leak introduced in the fixed test
This commit is contained in:
Nir Soffer 2017-07-27 02:27:08 +03:00 committed by Victor Stinner
parent bb7fd3f4d0
commit 25de5baf3e
2 changed files with 6 additions and 2 deletions

View file

@ -619,8 +619,9 @@ if os.name == 'posix':
def close(self):
if self.fd < 0:
return
os.close(self.fd)
fd = self.fd
self.fd = -1
os.close(fd)
def fileno(self):
return self.fd