libubus.h: add ubus_auto_shutdown()
authorBen Kelly <ben@benjii.net>
Tue, 2 Feb 2016 13:02:59 +0000 (15:02 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 7 Feb 2016 13:24:28 +0000 (14:24 +0100)
Add ubus_auto_shutdown function, which ensures any pending uloop_timer is cancelled before calling ubus_shutdown on the context.

This avoids a condition where ubus_shutdown() is called during ubus_auto_connect attempting a reconnection.

Signed-off-by: Ben Kelly <ben@benjii.net>
libubus.h

index 54e7d481b0496e719f2f567b664a2619c82a3b16..1b219b7f9e4520208408957ce477ccee0af7a6db 100644 (file)
--- a/libubus.h
+++ b/libubus.h
@@ -240,6 +240,12 @@ void ubus_free(struct ubus_context *ctx);
 /* call this only for struct ubus_context pointers initialised by ubus_connect_ctx() */
 void ubus_shutdown(struct ubus_context *ctx);
 
+static inline void ubus_auto_shutdown(struct ubus_auto_conn *conn)
+{
+       uloop_timeout_cancel(&conn->timer);
+       ubus_shutdown(&conn->ctx);
+}
+
 const char *ubus_strerror(int error);
 
 static inline void ubus_add_uloop(struct ubus_context *ctx)