From fcf94981e485aa17ccc8b3371e0a4cb9724bda8b Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 15 Nov 2019 15:07:21 +0100 Subject: [PATCH] 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(). --- src/ring.c | 7 ++++++- src/sink.c | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) 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 }, {{},} }};