diff options
author | Benjamin Peterson <benjamin@python.org> | 2011-12-27 21:36:32 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2011-12-27 21:36:32 (GMT) |
commit | 95c16629d3549e7306d297ed09e26e58b151f720 (patch) | |
tree | b6d9d79119a31b9029a4bad9d82c27ea362886b3 | |
parent | a5f6f2aba34dcf8f2a7e899aff0d7c37218502e9 (diff) | |
download | cpython-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.c | 12 | ||||
-rwxr-xr-x | configure | 29 | ||||
-rw-r--r-- | configure.in | 6 | ||||
-rw-r--r-- | pyconfig.h.in | 3 |
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 @@ -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 |