summaryrefslogtreecommitdiff
path: root/lang/python36/files
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python36/files')
-rw-r--r--lang/python36/files/patch-Modules___posixsubprocess.c25
-rw-r--r--lang/python36/files/patch-Modules_posixmodule.c26
2 files changed, 51 insertions, 0 deletions
diff --git a/lang/python36/files/patch-Modules___posixsubprocess.c b/lang/python36/files/patch-Modules___posixsubprocess.c
new file mode 100644
index 000000000000..01542ecb9e85
--- /dev/null
+++ b/lang/python36/files/patch-Modules___posixsubprocess.c
@@ -0,0 +1,25 @@
+# Add closefrom(2) support
+# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
+# https://bugs.python.org/issue38061
+# TODO: Upstream
+
+--- Modules/_posixsubprocess.c.orig 2019-07-02 20:25:39 UTC
++++ Modules/_posixsubprocess.c
+@@ -236,8 +236,15 @@ _close_fds_by_brute_force(long start_fd, PyObject *py_
+ start_fd = keep_fd + 1;
+ }
+ if (start_fd <= end_fd) {
+- for (fd_num = start_fd; fd_num < end_fd; ++fd_num) {
+- close(fd_num);
++#ifdef __FreeBSD__
++ if (end_fd >= sysconf(_SC_OPEN_MAX)) {
++ closefrom(start_fd);
++ } else
++#endif
++ {
++ for (fd_num = start_fd; fd_num < end_fd; ++fd_num) {
++ close(fd_num);
++ }
+ }
+ }
+ }
diff --git a/lang/python36/files/patch-Modules_posixmodule.c b/lang/python36/files/patch-Modules_posixmodule.c
new file mode 100644
index 000000000000..a0247dcc628d
--- /dev/null
+++ b/lang/python36/files/patch-Modules_posixmodule.c
@@ -0,0 +1,26 @@
+# Add closefrom(2) support
+# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274
+# https://bugs.python.org/issue38061
+# TODO: Upstream
+
+--- Modules/posixmodule.c.orig 2019-07-02 20:25:39 UTC
++++ Modules/posixmodule.c
+@@ -7685,8 +7685,16 @@ os_closerange_impl(PyObject *module, int fd_low, int f
+ int i;
+ Py_BEGIN_ALLOW_THREADS
+ _Py_BEGIN_SUPPRESS_IPH
+- for (i = Py_MAX(fd_low, 0); i < fd_high; i++)
+- close(i);
++ fd_low = Py_MAX(fd_low, 0);
++#ifdef __FreeBSD__
++ if (fd_high >= sysconf(_SC_OPEN_MAX)) {
++ closefrom(fd_low);
++ } else
++#endif
++ {
++ for (i = fd_low; i < fd_high; i++)
++ close(i);
++ }
+ _Py_END_SUPPRESS_IPH
+ Py_END_ALLOW_THREADS
+ Py_RETURN_NONE;