From: Olivier Houchard Date: Tue, 16 Apr 2019 16:37:05 +0000 (+0200) Subject: MINOR: fd: Add a counter of used fds. X-Git-Tag: v2.0-dev3~217 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c49d2e213edba879fa37e1ea45e6fe5c99fb626;p=thirdparty%2Fhaproxy.git MINOR: fd: Add a counter of used fds. Add a new counter, ha_used_fds, that let us know how many file descriptors we're currently using. --- diff --git a/include/proto/fd.h b/include/proto/fd.h index 07bb20a05c..745c4fe458 100644 --- a/include/proto/fd.h +++ b/include/proto/fd.h @@ -49,6 +49,8 @@ extern THREAD_LOCAL int fd_nbupdt; // number of updates in the list extern int poller_wr_pipe[MAX_THREADS]; +extern volatile int ha_used_fds; // Number of FDs we're currently using + __decl_hathreads(extern HA_RWLOCK_T __attribute__((aligned(64))) fdcache_lock); /* global lock to protect fd_cache array */ /* Deletes an FD from the fdsets. @@ -555,6 +557,7 @@ static inline void fd_insert(int fd, void *owner, void (*iocb)(int fd), unsigned */ if (locked) HA_SPIN_UNLOCK(FD_LOCK, &fdtab[fd].lock); + _HA_ATOMIC_ADD(&ha_used_fds, 1); } /* Computes the bounded poll() timeout based on the next expiration timer diff --git a/src/fd.c b/src/fd.c index ab0df33aed..fef44571e5 100644 --- a/src/fd.c +++ b/src/fd.c @@ -186,6 +186,8 @@ THREAD_LOCAL int fd_nbupdt = 0; // number of updates in the list THREAD_LOCAL int poller_rd_pipe = -1; // Pipe to wake the thread int poller_wr_pipe[MAX_THREADS]; // Pipe to wake the threads +volatile int ha_used_fds = 0; // Number of FD we're currently using + #define _GET_NEXT(fd, off) ((struct fdlist_entry *)(void *)((char *)(&fdtab[fd]) + off))->next #define _GET_PREV(fd, off) ((struct fdlist_entry *)(void *)((char *)(&fdtab[fd]) + off))->prev /* adds fd to fd list if it was not yet in it */ @@ -387,6 +389,7 @@ static void fd_dodelete(int fd, int do_close) if (do_close) { polled_mask[fd] = 0; close(fd); + _HA_ATOMIC_SUB(&ha_used_fds, 1); } if (locked) HA_SPIN_UNLOCK(FD_LOCK, &fdtab[fd].lock);