From: Willy Tarreau Date: Wed, 4 Sep 2019 11:25:41 +0000 (+0200) Subject: MINOR: fd: make updt_fd_polling() a normal function X-Git-Tag: v2.1-dev2~110 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dbe3060e81e268132ec07e8d54ce69c160c8267b;p=thirdparty%2Fhaproxy.git MINOR: fd: make updt_fd_polling() a normal function It's called from many places, better use a real function than an inline. --- diff --git a/include/proto/fd.h b/include/proto/fd.h index b072b30445..4b932357ff 100644 --- a/include/proto/fd.h +++ b/include/proto/fd.h @@ -104,31 +104,7 @@ void run_poller(); void fd_add_to_fd_list(volatile struct fdlist *list, int fd, int off); void fd_rm_from_fd_list(volatile struct fdlist *list, int fd, int off); - -/* Mark fd as updated for polling and allocate an entry in the update list - * for this if it was not already there. This can be done at any time. - */ -static inline void updt_fd_polling(const int fd) -{ - if ((fdtab[fd].thread_mask & all_threads_mask) == tid_bit) { - - /* note: we don't have a test-and-set yet in hathreads */ - - if (HA_ATOMIC_BTS(&fdtab[fd].update_mask, tid)) - return; - - fd_updt[fd_nbupdt++] = fd; - } else { - unsigned long update_mask = fdtab[fd].update_mask; - do { - if (update_mask == fdtab[fd].thread_mask) - return; - } while (!_HA_ATOMIC_CAS(&fdtab[fd].update_mask, &update_mask, - fdtab[fd].thread_mask)); - fd_add_to_fd_list(&update_list, fd, offsetof(struct fdtab, update)); - } - -} +void updt_fd_polling(const int fd); /* Called from the poller to acknoledge we read an entry from the global * update list, to remove our bit from the update_mask, and remove it from diff --git a/src/fd.c b/src/fd.c index 183c57375f..6bfefdddc8 100644 --- a/src/fd.c +++ b/src/fd.c @@ -337,6 +337,27 @@ void fd_remove(int fd) fd_dodelete(fd, 0); } +void updt_fd_polling(const int fd) +{ + if ((fdtab[fd].thread_mask & all_threads_mask) == tid_bit) { + + /* note: we don't have a test-and-set yet in hathreads */ + + if (HA_ATOMIC_BTS(&fdtab[fd].update_mask, tid)) + return; + + fd_updt[fd_nbupdt++] = fd; + } else { + unsigned long update_mask = fdtab[fd].update_mask; + do { + if (update_mask == fdtab[fd].thread_mask) + return; + } while (!_HA_ATOMIC_CAS(&fdtab[fd].update_mask, &update_mask, + fdtab[fd].thread_mask)); + fd_add_to_fd_list(&update_list, fd, offsetof(struct fdtab, update)); + } +} + /* Tries to send parts from followed by parts from * optionally followed by a newline if is non-null, to file descriptor * . The message is sent atomically using writev(). It may be truncated to