mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	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
	
	Block a user