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().
This commit is contained in:
Willy Tarreau 2019-11-15 15:07:21 +01:00
parent a63a5c2c65
commit fcf94981e4
2 changed files with 7 additions and 2 deletions

View File

@ -202,7 +202,8 @@ ssize_t ring_write(struct ring *ring, size_t maxlen, const struct ist pfx[], siz
/* Tries to attach CLI handler <appctx> as a new reader on ring <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;

View File

@ -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 [<sink>] : show event sink state", cli_parse_show_events, cli_io_handler_show_ring, cli_io_release_show_ring },
{ { "show", "events", NULL }, "show events [<sink>] : show event sink state", cli_parse_show_events, NULL, NULL },
{{},}
}};