[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