[LEDE-DEV] [PATCH][procd] ubus: use ubus_auto_connect() logic
Alexandru Ardelean
ardeleanalex at gmail.com
Fri May 19 00:45:49 PDT 2017
Admittedly, the semantic is a bit different, in the sense
that there are no progressive retry timeouts.
ubus_auto_connect() uses 1 second fixed retry intervals.
Whereas the old logic would start at 50 millisecs and
progress up to 1 second.
Other than that, the rest should be the same overall logic.
This should cleanup the code a bit.
For reference, the `ubus_add_uloop()` call is handled
by ubus_auto_connect() as well.
Signed-off-by: Alexandru Ardelean <ardeleanalex at gmail.com>
---
ubus.c | 55 +++++--------------------------------------------------
1 file changed, 5 insertions(+), 50 deletions(-)
diff --git a/ubus.c b/ubus.c
index 8d521ac..5dd5452 100644
--- a/ubus.c
+++ b/ubus.c
@@ -20,68 +20,23 @@
#include "procd.h"
char *ubus_socket = NULL;
-static struct ubus_context *ctx;
-static struct uloop_timeout ubus_timer;
-static int timeout;
-
-static void reset_timeout(void)
-{
- timeout = 50;
-}
-
-static void timeout_retry(void)
-{
- uloop_timeout_set(&ubus_timer, timeout);
- timeout *= 2;
- if (timeout > 1000)
- timeout = 1000;
-}
+static struct ubus_auto_conn conn;
static void
-ubus_reconnect_cb(struct uloop_timeout *timeout)
+ubus_auto_connect_cb(struct ubus_context *ctx)
{
- if (!ubus_reconnect(ctx, ubus_socket)) {
- ubus_add_uloop(ctx);
- return;
- }
-
- timeout_retry();
-}
-
-static void
-ubus_disconnect_cb(struct ubus_context *ctx)
-{
- ubus_timer.cb = ubus_reconnect_cb;
- reset_timeout();
- timeout_retry();
-}
-
-static void
-ubus_connect_cb(struct uloop_timeout *timeout)
-{
- ctx = ubus_connect(ubus_socket);
-
- if (!ctx) {
- DEBUG(4, "Connection to ubus failed\n");
- timeout_retry();
- return;
- }
-
- ctx->connection_lost = ubus_disconnect_cb;
ubus_init_service(ctx);
ubus_init_system(ctx);
watch_ubus(ctx);
DEBUG(2, "Connected to ubus, id=%08x\n", ctx->local_id);
- reset_timeout();
- ubus_add_uloop(ctx);
procd_state_ubus_connect();
}
void
procd_connect_ubus(void)
{
- ubus_timer.cb = ubus_connect_cb;
- reset_timeout();
- timeout_retry();
+ conn.path = ubus_socket;
+ conn.cb = ubus_auto_connect_cb;
+ ubus_auto_connect(&conn);
}
--
2.7.4
More information about the Lede-dev
mailing list