bpo-31106: Fix handling of erros in posix_fallocate() and posix_fadvise() (#3000) (#3000)

This commit is contained in:
Коренберг Марк 2017-08-14 18:55:16 +05:00 committed by larryhastings
parent 48d9823a0e
commit d4b93e21c2
2 changed files with 39 additions and 10 deletions

View file

@ -8917,11 +8917,16 @@ os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset,
Py_BEGIN_ALLOW_THREADS
result = posix_fallocate(fd, offset, length);
Py_END_ALLOW_THREADS
} while (result != 0 && errno == EINTR &&
!(async_err = PyErr_CheckSignals()));
if (result != 0)
return (!async_err) ? posix_error() : NULL;
Py_RETURN_NONE;
} while (result == EINTR && !(async_err = PyErr_CheckSignals()));
if (result == 0)
Py_RETURN_NONE;
if (async_err)
return NULL;
errno = result;
return posix_error();
}
#endif /* HAVE_POSIX_FALLOCATE) && !POSIX_FADVISE_AIX_BUG */
@ -8959,11 +8964,16 @@ os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset,
Py_BEGIN_ALLOW_THREADS
result = posix_fadvise(fd, offset, length, advice);
Py_END_ALLOW_THREADS
} while (result != 0 && errno == EINTR &&
!(async_err = PyErr_CheckSignals()));
if (result != 0)
return (!async_err) ? posix_error() : NULL;
Py_RETURN_NONE;
} while (result == EINTR && !(async_err = PyErr_CheckSignals()));
if (result == 0)
Py_RETURN_NONE;
if (async_err)
return NULL;
errno = result;
return posix_error();
}
#endif /* HAVE_POSIX_FADVISE && !POSIX_FADVISE_AIX_BUG */