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

John Crispin blogic at openwrt.org
Fri Feb 26 01:33:15 EST 2016


Description of what the patch does is missing

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();
>  
> 
_______________________________________________
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