[OpenWrt-Devel] [PATCH] [ubus 2/2] cli: add timeout support for listen command

Zhao, Gang gang.zhao.42 at gmail.com
Fri Feb 26 03:33:42 EST 2016


On Fri, Feb 26, 2016 at 2:33 PM, John Crispin <blogic at openwrt.org> wrote:

> Description of what the patch does is missing
>

Hi, John

Currently 'ubus listen' command does not respect the timeout parameter,
i.e., whether timeout parameter is provided, 'ubus listen' will always run
infinitely, this patch let 'ubus listen' command support the timeout
parameter, for example, 'ubus listen -t 60' will cause the command to exit
after 60 seconds.

The 'ubus wait_for' command already support timeout parameter, so I think
it may be good to let 'ubus listen' also support timeout.


> John
>
> On 26/02/2016 03:27, Zhao, Gang wrote:
> > Signed-off-by: Zhao, Gang <gang.zhao.42 at gmail.com>
> > ---
> >  cli.c | 25 ++++++++++++++++++++-----
> >  1 file changed, 20 insertions(+), 5 deletions(-)
> >
> > diff --git a/cli.c b/cli.c
> > index c476f35..24b5d22 100644
> > --- a/cli.c
> > +++ b/cli.c
> > @@ -125,15 +125,29 @@ static int ubus_cli_call(struct ubus_context *ctx,
> int argc, char **argv)
> >       return ubus_invoke(ctx, id, argv[1], b.head,
> receive_call_result_data, NULL, timeout * 1000);
> >  }
> >
> > +struct cli_listen_data {
> > +     struct uloop_timeout timeout;
> > +     struct ubus_event_handler ev;
> > +     bool timed_out;
> > +};
> > +
> > +static void listen_timeout(struct uloop_timeout *timeout)
> > +{
> > +     struct cli_listen_data *data = container_of(timeout, struct
> cli_listen_data, timeout);
> > +     data->timed_out = true;
> > +     uloop_end();
> > +}
> > +
> >  static int ubus_cli_listen(struct ubus_context *ctx, int argc, char
> **argv)
> >  {
> > -     struct ubus_event_handler listener;
> > +     struct cli_listen_data data = {
> > +             .timeout.cb = listen_timeout,
> > +             .ev.cb = receive_event,
> > +             .timed_out = false,
> > +     };
> >       const char *event;
> >       int ret = 0;
> >
> > -     memset(&listener, 0, sizeof(listener));
> > -     listener.cb = receive_event;
> > -
> >       if (argc > 0) {
> >               event = argv[0];
> >       } else {
> > @@ -142,7 +156,7 @@ static int ubus_cli_listen(struct ubus_context *ctx,
> int argc, char **argv)
> >       }
> >
> >       do {
> > -             ret = ubus_register_event_handler(ctx, &listener, event);
> > +             ret = ubus_register_event_handler(ctx, &data.ev, event);
> >               if (ret)
> >                       break;
> >
> > @@ -163,6 +177,7 @@ static int ubus_cli_listen(struct ubus_context *ctx,
> int argc, char **argv)
> >
> >       uloop_init();
> >       ubus_add_uloop(ctx);
> > +     uloop_timeout_set(&data.timeout, timeout * 1000);
> >       uloop_run();
> >       uloop_done();
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20160226/c2dd6f8d/attachment.htm>
-------------- next part --------------
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list