mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
bpo-38110: Use fdwalk for os.closerange() when available. (GH-15224)
Use fdwalk() on platforms that support it to implement os.closerange().
This commit is contained in:
parent
af636f4f91
commit
e20134f889
5 changed files with 32 additions and 2 deletions
|
|
@ -8422,6 +8422,21 @@ os_close_impl(PyObject *module, int fd)
|
|||
}
|
||||
|
||||
|
||||
#ifdef HAVE_FDWALK
|
||||
static int
|
||||
_fdwalk_close_func(void *lohi, int fd)
|
||||
{
|
||||
int lo = ((int *)lohi)[0];
|
||||
int hi = ((int *)lohi)[1];
|
||||
|
||||
if (fd >= hi)
|
||||
return 1;
|
||||
else if (fd >= lo)
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
#endif /* HAVE_FDWALK */
|
||||
|
||||
/*[clinic input]
|
||||
os.closerange
|
||||
|
||||
|
|
@ -8436,11 +8451,21 @@ static PyObject *
|
|||
os_closerange_impl(PyObject *module, int fd_low, int fd_high)
|
||||
/*[clinic end generated code: output=0ce5c20fcda681c2 input=5855a3d053ebd4ec]*/
|
||||
{
|
||||
#ifdef HAVE_FDWALK
|
||||
int lohi[2];
|
||||
#else
|
||||
int i;
|
||||
#endif
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
_Py_BEGIN_SUPPRESS_IPH
|
||||
#ifdef HAVE_FDWALK
|
||||
lohi[0] = Py_MAX(fd_low, 0);
|
||||
lohi[1] = fd_high;
|
||||
fdwalk(_fdwalk_close_func, lohi);
|
||||
#else
|
||||
for (i = Py_MAX(fd_low, 0); i < fd_high; i++)
|
||||
close(i);
|
||||
#endif
|
||||
_Py_END_SUPPRESS_IPH
|
||||
Py_END_ALLOW_THREADS
|
||||
Py_RETURN_NONE;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue