From: Willy Tarreau Date: Fri, 15 Nov 2019 14:07:21 +0000 (+0100) Subject: MINOR: ring: make the parse function automatically set the handler/release X-Git-Tag: v2.1-dev5~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fcf94981e485aa17ccc8b3371e0a4cb9724bda8b;p=thirdparty%2Fhaproxy.git MINOR: ring: make the parse function automatically set the handler/release ring_attach_cli() is called by the keyword parsing function to dump a ring to the CLI. It can only work with a specific handler and release function. Let's make it set them appropriately instead of having the caller know these functions. This way adding a command to dump a ring is as simple as declaring a parsing function calling ring_attach_cli(). --- diff --git a/src/ring.c b/src/ring.c index 755e69cc13..b94b5699bf 100644 --- a/src/ring.c +++ b/src/ring.c @@ -202,7 +202,8 @@ ssize_t ring_write(struct ring *ring, size_t maxlen, const struct ist pfx[], siz /* Tries to attach CLI handler as a new reader on ring . This is * meant to be used when registering a CLI function to dump a buffer, so it * returns zero on success, or non-zero on failure with a message in the appctx - * CLI context. + * CLI context. It automatically sets the io_handler and io_release callbacks if + * they were not set. */ int ring_attach_cli(struct ring *ring, struct appctx *appctx) { @@ -216,6 +217,10 @@ int ring_attach_cli(struct ring *ring, struct appctx *appctx) } while (!_HA_ATOMIC_CAS(&ring->readers_count, &users, users + 1)); + if (!appctx->io_handler) + appctx->io_handler = cli_io_handler_show_ring; + if (!appctx->io_release) + appctx->io_release = cli_io_release_show_ring; appctx->ctx.cli.p0 = ring; appctx->ctx.cli.o0 = ~0; // start from the oldest event return 0; diff --git a/src/sink.c b/src/sink.c index 72e17433ea..b601fae1b5 100644 --- a/src/sink.c +++ b/src/sink.c @@ -269,7 +269,7 @@ INITCALL0(STG_REGISTER, sink_init); REGISTER_POST_DEINIT(sink_deinit); static struct cli_kw_list cli_kws = {{ },{ - { { "show", "events", NULL }, "show events [] : show event sink state", cli_parse_show_events, cli_io_handler_show_ring, cli_io_release_show_ring }, + { { "show", "events", NULL }, "show events [] : show event sink state", cli_parse_show_events, NULL, NULL }, {{},} }};