Browse Source
bpo-38110: Use fdwalk for os.closerange() when available. (GH-15224)
Use fdwalk() on platforms that support it to implement os.closerange().
(cherry picked from commit e20134f889 )
Co-authored-by: Jakub Kulík <Kulikjak@gmail.com>
pull/16030/head
Miss Islington (bot)
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with
32 additions and
2 deletions
Misc/NEWS.d/next/Library/2019-09-11-14-49-20.bpo-38110.A19Y-q.rst
Modules/posixmodule.c
configure
configure.ac
pyconfig.h.in
@ -0,0 +1,2 @@
The os.closewalk() implementation now uses the libc fdwalk() API on
platforms where it is available.
@ -8419,6 +8419,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
@ -8433,11 +8448,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 ;
@ -11500,7 +11500,7 @@ fi
for ac_func in alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
clock confstr copy_file_range ctermid dup3 execv explicit_bzero explicit_memset \
faccessat fchmod fchmodat fchown fchownat \
fexecve fdopendir fork fpathconf fstatat ftime ftruncate futimesat \
fdwalk fexecve fdopendir fork fpathconf fstatat ftime ftruncate futimesat \
futimens futimes gai_strerror getentropy \
getgrgid_r getgrnam_r \
getgrouplist getgroups getlogin getloadavg getpeername getpgid getpid \
@ -3538,7 +3538,7 @@ fi
AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
clock confstr copy_file_range ctermid dup3 execv explicit_bzero explicit_memset \
faccessat fchmod fchmodat fchown fchownat \
fexecve fdopendir fork fpathconf fstatat ftime ftruncate futimesat \
fdwalk fexecve fdopendir fork fpathconf fstatat ftime ftruncate futimesat \
futimens futimes gai_strerror getentropy \
getgrgid_r getgrnam_r \
getgrouplist getgroups getlogin getloadavg getpeername getpgid getpid \
@ -341,6 +341,9 @@
/* Define to 1 if you have the `fdopendir' function. */
#undef HAVE_FDOPENDIR
/* Define to 1 if you have the `fdwalk' function. */
#undef HAVE_FDWALK
/* Define to 1 if you have the `fexecve' function. */
#undef HAVE_FEXECVE