From 9c03935fc0abb033a32683f5e9d8bd6b2136b8fd Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Tue, 28 Jan 2014 13:48:52 +0100 Subject: src: Add timerfd_create() to handle stale fds. Reviewed-by: Stefan Metzmacher --- src/socket_wrapper.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src') diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index 941f660..0d74321 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -56,6 +56,9 @@ #ifdef HAVE_SYS_EVENTFD_H #include #endif +#ifdef HAVE_SYS_TIMERFD_H +#include +#endif #include #include #include @@ -335,6 +338,9 @@ struct swrap_libc_fns { #endif int (*libc_socket)(int domain, int type, int protocol); int (*libc_socketpair)(int domain, int type, int protocol, int sv[2]); +#ifdef HAVE_TIMERFD_CREATE + int (*libc_timerfd_create)(int clockid, int flags); +#endif ssize_t (*libc_writev)(int fd, const struct iovec *iov, int iovcnt); }; @@ -701,6 +707,15 @@ static int libc_socketpair(int domain, int type, int protocol, int sv[2]) return swrap.fns.libc_socketpair(domain, type, protocol, sv); } +#ifdef HAVE_TIMERFD_CREATE +static int libc_timerfd_create(int clockid, int flags) +{ + swrap_load_lib_function(SWRAP_LIBC, timerfd_create); + + return swrap.fns.libc_timerfd_create(clockid, flags); +} +#endif + static ssize_t libc_writev(int fd, const struct iovec *iov, int iovcnt) { swrap_load_lib_function(SWRAP_LIBSOCKET, writev); @@ -2158,6 +2173,29 @@ int socketpair(int family, int type, int protocol, int sv[2]) return swrap_socketpair(family, type, protocol, sv); } +/**************************************************************************** + * SOCKETPAIR + ***************************************************************************/ + +#ifdef HAVE_TIMERFD_CREATE +static int swrap_timerfd_create(int clockid, int flags) +{ + int fd; + + fd = libc_timerfd_create(clockid, flags); + if (fd != -1) { + swrap_remove_stale(fd); + } + + return fd; +} + +int timerfd_create(int clockid, int flags) +{ + return swrap_timerfd_create(clockid, flags); +} +#endif + /**************************************************************************** * PIPE ***************************************************************************/ -- cgit