From 595d7b72a6a58c175bfeb3c44dd51a05ffcdeab3 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Tue, 14 Nov 2017 11:28:52 +0100 Subject: [PATCH] MINOR: applets: Use a bitfield to track applets activity per-thread a bitfield has been added to know if there are runnable applets for a thread. When an applet is woken up, the bits corresponding to its thread_mask are set. When all active applets for a thread is get to be processed, the thread is removed from active ones by unsetting its tid_bit from the bitfield. --- include/proto/applet.h | 2 ++ src/applet.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/proto/applet.h b/include/proto/applet.h index 914b496f52..8024981e6a 100644 --- a/include/proto/applet.h +++ b/include/proto/applet.h @@ -30,6 +30,7 @@ #include extern unsigned int nb_applets; +extern unsigned long active_applets_mask; extern unsigned int applets_active_queue; __decl_hathreads(extern HA_SPINLOCK_T applet_active_lock); extern struct list applet_active_queue; @@ -113,6 +114,7 @@ static inline void __appctx_wakeup(struct appctx *appctx) if (LIST_ISEMPTY(&appctx->runq)) { LIST_ADDQ(&applet_active_queue, &appctx->runq); applets_active_queue++; + active_applets_mask |= appctx->thread_mask; } } diff --git a/src/applet.c b/src/applet.c index 1df6b091ea..e24f66d05c 100644 --- a/src/applet.c +++ b/src/applet.c @@ -21,6 +21,7 @@ #include unsigned int nb_applets = 0; +unsigned long active_applets_mask = 0; unsigned int applets_active_queue = 0; __decl_hathreads(HA_SPINLOCK_T applet_active_lock); /* spin lock related to applet active queue */ @@ -48,7 +49,7 @@ void applet_run_active() } curr = next; } - + active_applets_mask &= ~tid_bit; HA_SPIN_UNLOCK(APPLETS_LOCK, &applet_active_lock); /* The list is only scanned from the head. This guarantees that if any