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 07bb20a..745c4fe 100644
--- a/include/proto/fd.h
+++ b/include/proto/fd.h
@@ -49,6 +49,8 @@
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 @@
*/
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 <next>
diff --git a/src/fd.c b/src/fd.c
index ab0df33..fef4457 100644
--- a/src/fd.c
+++ b/src/fd.c
@@ -186,6 +186,8 @@
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 <fd> to fd list <list> if it was not yet in it */
@@ -387,6 +389,7 @@
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);