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.
This commit is contained in:
Christopher Faulet 2017-11-14 11:28:52 +01:00 committed by Willy Tarreau
parent 8a48f67526
commit 595d7b72a6
2 changed files with 4 additions and 1 deletions

View File

@ -30,6 +30,7 @@
#include <proto/connection.h>
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;
}
}

View File

@ -21,6 +21,7 @@
#include <proto/stream_interface.h>
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