From: Alexandru Ardelean <aardel...@riverbed.com> We seem to be getting timeout for ubus wait_for calls every now and then.
And it's not reliably reproducible. Looking at the code the only thing that would look like a potetntial reason, is that between the ubus_lookup() and ubus_register_event_handler() calls, there's a very narrow window where the event would get sent out and we would not get it, thus having to timeout. It doesn't look like registering the event handler first is a big problem for the whole wait_check_object() logic. Signed-off-by: Alexandru Ardelean <ardeleana...@gmail.com> Tested-by: Zefir Kurtisi <zefir.kurt...@neratec.com> --- cli.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cli.c b/cli.c index c5cbfc3..080f953 100644 --- a/cli.c +++ b/cli.c @@ -293,17 +293,20 @@ static int ubus_cli_wait_for(struct ubus_context *ctx, int argc, char **argv) uloop_init(); ubus_add_uloop(ctx); - ret = ubus_lookup(ctx, NULL, wait_list_cb, &data); + ret = ubus_register_event_handler(ctx, &data.ev, "ubus.object.add"); if (ret) return ret; if (!data.n_pending) return ret; - ret = ubus_register_event_handler(ctx, &data.ev, "ubus.object.add"); + ret = ubus_lookup(ctx, NULL, wait_list_cb, &data); if (ret) return ret; + if (!data.n_pending) + return ret; + uloop_timeout_set(&data.timeout, timeout * 1000); uloop_run(); uloop_done(); -- 2.6.6 _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev