From 0a2617527c9b46a587a8f34571a54347cd5c4b5a Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Mon, 10 Jun 2013 06:08:35 +0200 Subject: [PATCH] Inline fast part of tracked_fds_find(). --- configure.ac | 1 + src/compiler.h | 11 +++++++++++ src/trackfds.h | 15 +++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/configure.ac b/configure.ac index ec5b658..3b007c5 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,7 @@ AC_TYPE_SIZE_T AC_TYPE_SSIZE_T AC_C_INLINE +AX_C___ATTRIBUTE__ AC_FUNC_FORK AC_CHECK_FUNCS([dup2 memmove setenv strdup]) diff --git a/src/compiler.h b/src/compiler.h index 3d92f2f..9e23e23 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -20,6 +20,17 @@ #ifndef COMPILER_H #define COMPILER_H 1 +/* Prevent/force inlining. Used to improve performance. */ +#undef __noinline +#undef __always_inline +#ifdef HAVE___ATTRIBUTE__ +# define __noinline __attribute__((noinline)) +# define __always_inline __attribute__((always_inline)) +#else +# define __noinline +# define __always_inline +#endif + /* Branch prediction information for the compiler. */ #ifdef HAVE___BUILTIN_EXPECT # define likely(x) __builtin_expect(!!(x), 1) diff --git a/src/trackfds.h b/src/trackfds.h index 9b2aaa6..175f1e3 100644 --- a/src/trackfds.h +++ b/src/trackfds.h @@ -299,10 +299,25 @@ static int tracked_fds_remove(int fd) { /* Not found. */ return 0; } + +static int tracked_fds_find_slow(int fd); +/* + * tracked_fds_find() is called for each hook call and should be as fast as + * possible. As most file descriptors are < TRACKFDS_STATIC_COUNT, force the + * compiler to inline that part which is almost exclusively used. + * + * Inlining tracked_fds_add()/tracked_fds_remove() isn't worth the effort as + * they are not called often enough. + */ +inline static int tracked_fds_find(int fd) __always_inline; static int tracked_fds_find(int fd) { if (fd < TRACKFDS_STATIC_COUNT) { return tracked_fds[fd]; } + + return tracked_fds_find_slow(fd); +} +static int tracked_fds_find_slow(int fd) { if (tracked_fds_list_count == 0) { return 0; } -- 2.45.2