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:
parent
8a48f67526
commit
595d7b72a6
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue