summaryrefslogtreecommitdiffstats
path: root/package/utils
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2024-05-01 19:00:10 +0200
committerFelix Fietkau <nbd@nbd.name>2024-05-01 19:00:21 +0200
commitb6f1e2e5b08eccf23b28c80690d14a3ac6cd08e2 (patch)
tree6d7904bc2b8b12cad7572997a6274778c7ad158b /package/utils
parent52a5f4491c642fcb524494800ce64c5040901b86 (diff)
downloadopenwrt-b6f1e2e5b08eccf23b28c80690d14a3ac6cd08e2.tar.gz
openwrt-b6f1e2e5b08eccf23b28c80690d14a3ac6cd08e2.tar.bz2
openwrt-b6f1e2e5b08eccf23b28c80690d14a3ac6cd08e2.zip
ucode: fix ubus defer when running from within eloop (integrated with uloop)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package/utils')
-rw-r--r--package/utils/ucode/patches/100-ubus-fix-uc_ubus_have_uloop-for-eloop-uloop-combinat.patch26
1 files changed, 26 insertions, 0 deletions
diff --git a/package/utils/ucode/patches/100-ubus-fix-uc_ubus_have_uloop-for-eloop-uloop-combinat.patch b/package/utils/ucode/patches/100-ubus-fix-uc_ubus_have_uloop-for-eloop-uloop-combinat.patch
new file mode 100644
index 0000000000..a1659be3c8
--- /dev/null
+++ b/package/utils/ucode/patches/100-ubus-fix-uc_ubus_have_uloop-for-eloop-uloop-combinat.patch
@@ -0,0 +1,26 @@
+From: Felix Fietkau <nbd@nbd.name>
+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 <nbd@nbd.name>
+---
+
+--- 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;