Someone may have closed the file descriptor, with something like
f = open('test.test', 'w')
os.close(f.fileno())
f.close()
Protect against this by checking fd on windows before closing.
This commit is contained in:
Kristján Valur Jónsson 2009-03-24 13:21:53 +00:00
parent 7c43524d3c
commit dc7c128d74

View file

@ -77,11 +77,15 @@ internal_close(PyFileIOObject *self)
if (self->fd >= 0) {
int fd = self->fd;
self->fd = -1;
Py_BEGIN_ALLOW_THREADS
err = close(fd);
if (err < 0)
save_errno = errno;
Py_END_ALLOW_THREADS
/* fd is accessible and someone else may have closed it */
if (_PyVerify_fd(fd)) {
Py_BEGIN_ALLOW_THREADS
err = close(fd);
if (err < 0)
save_errno = errno;
Py_END_ALLOW_THREADS
} else
save_errno = errno;
}
if (err < 0) {
errno = save_errno;