Browse Source

ucode: fix ubus defer when running from within eloop (integrated with uloop)

Signed-off-by: Felix Fietkau <[email protected]>
Felix Fietkau 1 năm trước cách đây
mục cha
commit
b6f1e2e5b0

+ 26 - 0
package/utils/ucode/patches/100-ubus-fix-uc_ubus_have_uloop-for-eloop-uloop-combinat.patch

@@ -0,0 +1,26 @@
+From: Felix Fietkau <[email protected]>
+Date: Wed, 1 May 2024 18:40:19 +0200
+Subject: [PATCH] ubus: fix uc_ubus_have_uloop for eloop+uloop combination
+
+When uloop has been integrated with eloop (in hostapd/wpa_supplicant),
+uloop_cancelling will return false, since uloop_run is not being called.
+This leads to ubus.defer() calling uloop_run in a context where it can
+prevent the other event loop from running.
+
+Fix this by detecting event loop integration via uloop_fd_set_cb being set
+
+Signed-off-by: Felix Fietkau <[email protected]>
+---
+
+--- a/lib/ubus.c
++++ b/lib/ubus.c
+@@ -665,6 +665,9 @@ uc_ubus_have_uloop(void)
+ 	bool prev = uloop_cancelled;
+ 	bool active;
+ 
++	if (uloop_fd_set_cb)
++		return true;
++
+ 	uloop_cancelled = true;
+ 	active = uloop_cancelling();
+ 	uloop_cancelled = prev;