|
@@ -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;
|