ucode: fix ubus defer when running from within eloop (integrated with uloop)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
52a5f4491c
commit
b6f1e2e5b0
|
@ -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;
|
Loading…
Reference in New Issue