cli: register event handler first, then do lookup
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 <ardeleanalex@gmail.com>
This commit is contained in:
parent
ba45b27f8c
commit
312448a5b1
1 changed files with 5 additions and 2 deletions
7
cli.c
7
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();
|
||||
|
|
Loading…
Add table
Reference in a new issue