mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-19 20:27:01 +00:00
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>
|
#include <proto/connection.h>
|
||||||
|
|
||||||
extern unsigned int nb_applets;
|
extern unsigned int nb_applets;
|
||||||
|
extern unsigned long active_applets_mask;
|
||||||
extern unsigned int applets_active_queue;
|
extern unsigned int applets_active_queue;
|
||||||
__decl_hathreads(extern HA_SPINLOCK_T applet_active_lock);
|
__decl_hathreads(extern HA_SPINLOCK_T applet_active_lock);
|
||||||
extern struct list applet_active_queue;
|
extern struct list applet_active_queue;
|
||||||
@ -113,6 +114,7 @@ static inline void __appctx_wakeup(struct appctx *appctx)
|
|||||||
if (LIST_ISEMPTY(&appctx->runq)) {
|
if (LIST_ISEMPTY(&appctx->runq)) {
|
||||||
LIST_ADDQ(&applet_active_queue, &appctx->runq);
|
LIST_ADDQ(&applet_active_queue, &appctx->runq);
|
||||||
applets_active_queue++;
|
applets_active_queue++;
|
||||||
|
active_applets_mask |= appctx->thread_mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <proto/stream_interface.h>
|
#include <proto/stream_interface.h>
|
||||||
|
|
||||||
unsigned int nb_applets = 0;
|
unsigned int nb_applets = 0;
|
||||||
|
unsigned long active_applets_mask = 0;
|
||||||
unsigned int applets_active_queue = 0;
|
unsigned int applets_active_queue = 0;
|
||||||
__decl_hathreads(HA_SPINLOCK_T applet_active_lock); /* spin lock related to applet active queue */
|
__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;
|
curr = next;
|
||||||
}
|
}
|
||||||
|
active_applets_mask &= ~tid_bit;
|
||||||
HA_SPIN_UNLOCK(APPLETS_LOCK, &applet_active_lock);
|
HA_SPIN_UNLOCK(APPLETS_LOCK, &applet_active_lock);
|
||||||
|
|
||||||
/* The list is only scanned from the head. This guarantees that if any
|
/* The list is only scanned from the head. This guarantees that if any
|
||||||
|
Loading…
Reference in New Issue
Block a user