From: Willy Tarreau Date: Tue, 3 May 2022 16:39:27 +0000 (+0200) Subject: CLEANUP: stats/cli: stop using appctx->st2 X-Git-Tag: v2.6-dev9~52 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=41f885241e33d7515608acf848cb463696394f38;p=thirdparty%2Fhaproxy.git CLEANUP: stats/cli: stop using appctx->st2 Instead, let's have the state as an enum inside the context. It's much cleaner and safer as we know nobody else touches it. --- diff --git a/include/haproxy/stats-t.h b/include/haproxy/stats-t.h index f512419f2a..6fbe28b40e 100644 --- a/include/haproxy/stats-t.h +++ b/include/haproxy/stats-t.h @@ -122,7 +122,7 @@ enum { /* data transmission states for the stats responses */ -enum { +enum stat_state { STAT_ST_INIT = 0, STAT_ST_HEAD, STAT_ST_INFO, @@ -529,6 +529,7 @@ struct show_stat_ctx { unsigned int flags; /* STAT_* from stats-t.h */ int iid, type, sid; /* proxy id, type and service id if bounding of stats is enabled */ int st_code; /* the status code returned by an action */ + enum stat_state state; /* phase of output production */ }; extern THREAD_LOCAL void *trash_counters; diff --git a/src/http_ana.c b/src/http_ana.c index 1968f848c4..d2da6282ba 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -3927,7 +3927,8 @@ static int http_handle_stats(struct stream *s, struct channel *req) struct htx *htx; struct htx_sl *sl; - appctx->st1 = appctx->st2 = 0; + appctx->st1 = 0; + ctx->state = STAT_ST_INIT; ctx->st_code = STAT_STATUS_INIT; ctx->flags |= uri_auth->flags; ctx->flags |= STAT_FMT_HTML; /* assume HTML mode by default */ diff --git a/src/stats.c b/src/stats.c index ea43275be1..19c96cdfca 100644 --- a/src/stats.c +++ b/src/stats.c @@ -3732,9 +3732,9 @@ static int stats_dump_stat_to_buffer(struct conn_stream *cs, struct htx *htx, chunk_reset(&trash); - switch (appctx->st2) { + switch (ctx->state) { case STAT_ST_INIT: - appctx->st2 = STAT_ST_HEAD; /* let's start producing data */ + ctx->state = STAT_ST_HEAD; /* let's start producing data */ /* fall through */ case STAT_ST_HEAD: @@ -3751,10 +3751,10 @@ static int stats_dump_stat_to_buffer(struct conn_stream *cs, struct htx *htx, goto full; if (ctx->flags & STAT_JSON_SCHM) { - appctx->st2 = STAT_ST_FIN; + ctx->state = STAT_ST_FIN; return 1; } - appctx->st2 = STAT_ST_INFO; + ctx->state = STAT_ST_INFO; /* fall through */ case STAT_ST_INFO: @@ -3768,7 +3768,7 @@ static int stats_dump_stat_to_buffer(struct conn_stream *cs, struct htx *htx, ctx->obj1 = proxies_list; ctx->px_st = STAT_PX_ST_INIT; - appctx->st2 = STAT_ST_LIST; + ctx->state = STAT_ST_LIST; /* fall through */ case STAT_ST_LIST: @@ -3789,7 +3789,7 @@ static int stats_dump_stat_to_buffer(struct conn_stream *cs, struct htx *htx, break; } - appctx->st2 = STAT_ST_END; + ctx->state = STAT_ST_END; /* fall through */ case STAT_ST_END: @@ -3802,7 +3802,7 @@ static int stats_dump_stat_to_buffer(struct conn_stream *cs, struct htx *htx, goto full; } - appctx->st2 = STAT_ST_FIN; + ctx->state = STAT_ST_FIN; /* fall through */ case STAT_ST_FIN: @@ -3810,7 +3810,7 @@ static int stats_dump_stat_to_buffer(struct conn_stream *cs, struct htx *htx, default: /* unknown state ! */ - appctx->st2 = STAT_ST_FIN; + ctx->state = STAT_ST_FIN; return -1; }