MINOR: applet: make appctx use their own pool

A long time ago, applets were seen as an alternative to connections,
and since their respective sizes were roughly equal it appeared wise
to share the same pool. Nowadays, connections got significantly larger
but applets are not that often used, except for the cache. However
applets are mostly complementary and not alternatives anymore, as
it's very possible not to have a back connection or to share one with
other streams.

The connections will soon lose their addresses and their size will
shrink so much that appctx won't fit anymore. Given that the old
benefits of sharing these pools have long disappeared, let's stop
doing this and have a dedicated pool for appctx.
diff --git a/include/proto/applet.h b/include/proto/applet.h
index 62612b5..b4e9396 100644
--- a/include/proto/applet.h
+++ b/include/proto/applet.h
@@ -25,12 +25,13 @@
 #include <stdlib.h>
 
 #include <common/config.h>
+#include <common/memory.h>
 #include <common/mini-clist.h>
 #include <types/applet.h>
-#include <proto/connection.h>
 #include <proto/task.h>
 
 extern unsigned int nb_applets;
+extern struct pool_head *pool_head_appctx;
 
 struct task *task_run_applet(struct task *t, void *context, unsigned short state);
 
@@ -56,21 +57,20 @@
 
 /* Tries to allocate a new appctx and initialize its main fields. The appctx
  * is returned on success, NULL on failure. The appctx must be released using
- * pool_free(connection) or appctx_free(), since it's allocated from the
- * connection pool. <applet> is assigned as the applet, but it can be NULL.
+ * appctx_free(). <applet> is assigned as the applet, but it can be NULL.
  */
 static inline struct appctx *appctx_new(struct applet *applet, unsigned long thread_mask)
 {
 	struct appctx *appctx;
 
-	appctx = pool_alloc(pool_head_connection);
+	appctx = pool_alloc(pool_head_appctx);
 	if (likely(appctx != NULL)) {
 		appctx->obj_type = OBJ_TYPE_APPCTX;
 		appctx->applet = applet;
 		appctx_init(appctx, thread_mask);
 		appctx->t = task_new(thread_mask);
 		if (unlikely(appctx->t == NULL)) {
-			pool_free(pool_head_connection, appctx);
+			pool_free(pool_head_appctx, appctx);
 			return NULL;
 		}
 		appctx->t->process = task_run_applet;
@@ -83,9 +83,7 @@
 	return appctx;
 }
 
-/* Releases an appctx previously allocated by appctx_new(). Note that
- * we share the connection pool.
- */
+/* Releases an appctx previously allocated by appctx_new(). */
 static inline void __appctx_free(struct appctx *appctx)
 {
 	task_destroy(appctx->t);
@@ -96,7 +94,7 @@
 		HA_SPIN_UNLOCK(BUF_WQ_LOCK, &buffer_wq_lock);
 	}
 
-	pool_free(pool_head_connection, appctx);
+	pool_free(pool_head_appctx, appctx);
 	_HA_ATOMIC_SUB(&nb_applets, 1);
 }
 
diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h
index 63f1738..6727921 100644
--- a/include/proto/stream_interface.h
+++ b/include/proto/stream_interface.h
@@ -188,7 +188,7 @@
 	else if ((appctx = objt_appctx(si->end))) {
 		if (appctx->applet->release && !si_state_in(si->state, SI_SB_DIS|SI_SB_CLO))
 			appctx->applet->release(appctx);
-		appctx_free(appctx); /* we share the connection pool */
+		appctx_free(appctx);
 	} else if ((conn = objt_conn(si->end))) {
 		conn_stop_tracking(conn);
 		conn_full_close(conn);
diff --git a/src/applet.c b/src/applet.c
index 4832a74..f6cc088 100644
--- a/src/applet.c
+++ b/src/applet.c
@@ -23,6 +23,8 @@
 
 unsigned int nb_applets = 0;
 
+DECLARE_POOL(pool_head_appctx,  "appctx",  sizeof(struct appctx));
+
 /* Callback used to wake up an applet when a buffer is available. The applet
  * <appctx> is woken up if an input buffer was requested for the associated
  * stream interface. In this case the buffer is immediately allocated and the