From 3db05793b7b35238060f2310176f11b7df3844db Mon Sep 17 00:00:00 2001 From: Markos Chandras Date: Wed, 31 Oct 2012 16:02:49 +0000 Subject: epoll: Use epoll_pwait if arch does not have the epoll_wait syscall Signed-off-by: Markos Chandras Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/common/epoll.c | 11 +++++++++++ libc/sysdeps/linux/common/stubs.c | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'libc/sysdeps/linux') diff --git a/libc/sysdeps/linux/common/epoll.c b/libc/sysdeps/linux/common/epoll.c index b7366262a..5f1e589e9 100644 --- a/libc/sysdeps/linux/common/epoll.c +++ b/libc/sysdeps/linux/common/epoll.c @@ -55,4 +55,15 @@ static int __NC(epoll_pwait)(int epfd, struct epoll_event *events, int maxevents CANCELLABLE_SYSCALL(int, epoll_pwait, (int epfd, struct epoll_event *events, int maxevents, int timeout, const sigset_t *set), (epfd, events, maxevents, timeout, set)) +/* + * If epoll_wait is not defined, then call epoll_pwait instead using NULL + * for sigmask argument + */ +# ifndef __NR_epoll_wait +# include +int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout) +{ + return INLINE_SYSCALL(epoll_pwait, 5, epfd, events, maxevents, timeout, NULL); +} +# endif #endif diff --git a/libc/sysdeps/linux/common/stubs.c b/libc/sysdeps/linux/common/stubs.c index 0f000f0ed..dfbbd4215 100644 --- a/libc/sysdeps/linux/common/stubs.c +++ b/libc/sysdeps/linux/common/stubs.c @@ -107,7 +107,8 @@ make_stub(epoll_ctl) make_stub(epoll_pwait) #endif -#if !defined __NR_epoll_wait && defined __UCLIBC_HAS_EPOLL__ +#if !defined __NR_epoll_wait && defined __UCLIBC_HAS_EPOLL__ \ + && !defined __NR_epoll_pwait make_stub(epoll_wait) #endif -- cgit v1.2.3