summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2011-12-27 21:36:32 (GMT)
committerBenjamin Peterson <benjamin@python.org>2011-12-27 21:36:32 (GMT)
commit95c16629d3549e7306d297ed09e26e58b151f720 (patch)
treeb6d9d79119a31b9029a4bad9d82c27ea362886b3
parenta5f6f2aba34dcf8f2a7e899aff0d7c37218502e9 (diff)
downloadcpython-95c16629d3549e7306d297ed09e26e58b151f720.zip
cpython-95c16629d3549e7306d297ed09e26e58b151f720.tar.gz
cpython-95c16629d3549e7306d297ed09e26e58b151f720.tar.bz2
fix for old kernels which don't have epoll_create1
-rw-r--r--Modules/selectmodule.c12
-rwxr-xr-xconfigure29
-rw-r--r--configure.in6
-rw-r--r--pyconfig.h.in3
4 files changed, 45 insertions, 5 deletions
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 6e3e6cb..a8413fe 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -1087,7 +1087,7 @@ pyepoll_internal_close(pyEpoll_Object *self)
}
static PyObject *
-newPyEpoll_Object(PyTypeObject *type, int flags, SOCKET fd)
+newPyEpoll_Object(PyTypeObject *type, int sizehint, int flags, SOCKET fd)
{
pyEpoll_Object *self;
@@ -1098,7 +1098,11 @@ newPyEpoll_Object(PyTypeObject *type, int flags, SOCKET fd)
if (fd == -1) {
Py_BEGIN_ALLOW_THREADS
+#ifdef HAVE_EPOLL_CREATE1
self->epfd = epoll_create1(flags);
+#else
+ self->epfd = epoll_create(sizehint);
+#endif
Py_END_ALLOW_THREADS
}
else {
@@ -1127,7 +1131,7 @@ pyepoll_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
}
- return newPyEpoll_Object(type, flags, -1);
+ return newPyEpoll_Object(type, sizehint, flags, -1);
}
@@ -1185,7 +1189,7 @@ pyepoll_fromfd(PyObject *cls, PyObject *args)
if (!PyArg_ParseTuple(args, "i:fromfd", &fd))
return NULL;
- return newPyEpoll_Object((PyTypeObject*)cls, 0, fd);
+ return newPyEpoll_Object((PyTypeObject*)cls, FD_SETSIZE - 1, 0, fd);
}
PyDoc_STRVAR(pyepoll_fromfd_doc,
@@ -2213,7 +2217,9 @@ PyInit_select(void)
PyModule_AddIntConstant(m, "EPOLLWRBAND", EPOLLWRBAND);
PyModule_AddIntConstant(m, "EPOLLMSG", EPOLLMSG);
+#ifdef EPOLL_CLOEXEC
PyModule_AddIntConstant(m, "EPOLL_CLOEXEC", EPOLL_CLOEXEC);
+#endif
#endif /* HAVE_EPOLL */
#ifdef HAVE_KQUEUE
diff --git a/configure b/configure
index 455e62a..7cd7e91 100755
--- a/configure
+++ b/configure
@@ -9606,6 +9606,31 @@ $as_echo "no" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for epoll_create1" >&5
+$as_echo_n "checking for epoll_create1... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/epoll.h>
+int
+main ()
+{
+void *x=epoll_create1
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_EPOLL_CREATE1 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kqueue" >&5
$as_echo_n "checking for kqueue... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -14564,8 +14589,8 @@ esac
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
-config_files="`echo $ac_config_files`"
-config_headers="`echo $ac_config_headers`"
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
_ACEOF
diff --git a/configure.in b/configure.in
index 95fb8c5..b7eccb7 100644
--- a/configure.in
+++ b/configure.in
@@ -2628,6 +2628,12 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/epoll.h>]], [[void *x=epoll_c
AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)
])
+AC_MSG_CHECKING(for epoll_create1)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/epoll.h>]], [[void *x=epoll_create1]])],
+ [AC_DEFINE(HAVE_EPOLL_CREATE1, 1, Define if you have the 'epoll_create1' function.)
+ AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)
+])
AC_MSG_CHECKING(for kqueue)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <sys/types.h>
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 6b49721..accc893 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -196,6 +196,9 @@
/* Define if you have the 'epoll' functions. */
#undef HAVE_EPOLL
+/* Define if you have the 'epoll_create1' function. */
+#undef HAVE_EPOLL_CREATE1
+
/* Define to 1 if you have the `erf' function. */
#undef HAVE_ERF