|
From 8253b517585a664be53718f1522e24291f553d95 Mon Sep 17 00:00:00 2001
|
|
From: Christopher Faulet <cfaulet@haproxy.com>
|
|
Date: Thu, 23 Feb 2017 10:17:15 +0100
|
|
Subject: [PATCH 2/7] BUG/MINOR: spoe: Fix soft stop handler using a specific
|
|
id for spoe filters
|
|
|
|
During a soft stop, we need to wakeup all SPOE applets to stop them. So we loop
|
|
on all proxies, and for each proxy, on all filters. But we must be sure to only
|
|
handle SPOE filters here. To do so, we use a specific id.
|
|
(cherry picked from commit 3b386a318f699def6f37b4d3199cd1d72c481a0f)
|
|
---
|
|
src/flt_spoe.c | 14 ++++++++++++--
|
|
1 file changed, 12 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/flt_spoe.c b/src/flt_spoe.c
|
|
index aa6414a..2a96c65 100644
|
|
--- a/src/flt_spoe.c
|
|
+++ b/src/flt_spoe.c
|
|
@@ -235,6 +235,9 @@ struct spoe_context {
|
|
unsigned int process_exp; /* expiration date to process an event */
|
|
};
|
|
|
|
+/* SPOE filter id. Used to identify SPOE filters */
|
|
+const char *spoe_filter_id = "SPOE filter";
|
|
+
|
|
/* Set if the handle on SIGUSR1 is registered */
|
|
static int sighandler_registered = 0;
|
|
|
|
@@ -2286,10 +2289,16 @@ sig_stop_spoe(struct sig_handler *sh)
|
|
struct flt_conf *fconf;
|
|
|
|
list_for_each_entry(fconf, &p->filter_configs, list) {
|
|
- struct spoe_config *conf = fconf->conf;
|
|
- struct spoe_agent *agent = conf->agent;
|
|
+ struct spoe_config *conf;
|
|
+ struct spoe_agent *agent;
|
|
struct appctx *appctx;
|
|
|
|
+ if (fconf->id != spoe_filter_id)
|
|
+ continue;
|
|
+
|
|
+ conf = fconf->conf;
|
|
+ agent = conf->agent;
|
|
+
|
|
list_for_each_entry(appctx, &agent->cache, ctx.spoe.list) {
|
|
si_applet_want_get(appctx->owner);
|
|
si_applet_want_put(appctx->owner);
|
|
@@ -3178,6 +3187,7 @@ parse_spoe_flt(char **args, int *cur_arg, struct proxy *px,
|
|
}
|
|
|
|
*cur_arg = pos;
|
|
+ fconf->id = spoe_filter_id;
|
|
fconf->ops = &spoe_ops;
|
|
fconf->conf = conf;
|
|
return 0;
|
|
--
|
|
2.10.2
|
|
|