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.
diff --git a/include/proto/applet.h b/include/proto/applet.h
index 914b496..8024981 100644
--- a/include/proto/applet.h
+++ b/include/proto/applet.h
@@ -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 @@
 	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 1df6b09..e24f66d 100644
--- a/src/applet.c
+++ b/src/applet.c
@@ -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 @@
 		}
 		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