diff net/unbound.lua @ 14208:9c062f243d3a 13.0

net.unbound: Let in-flight queries complete after re-initialization This is meant to reduce potential disruption of in-flight queries on reload.
author Kim Alvefur <zash@zash.se>
date Sat, 30 May 2026 19:18:21 +0200
parents 23f1c71b3d56
children c4aa9b2b4787
line wrap: on
line diff
--- a/net/unbound.lua	Sat May 30 00:32:06 2026 +0200
+++ b/net/unbound.lua	Sat May 30 19:18:21 2026 +0200
@@ -19,6 +19,7 @@
 local libunbound = require"lunbound";
 local promise = require"prosody.util.promise";
 local new_id = require "prosody.util.id".short;
+local timer = require "prosody.util.timer";
 
 local dns_utils = require"prosody.util.dns";
 local classes, types, errors = dns_utils.classes, dns_utils.types, dns_utils.errors;
@@ -165,8 +166,14 @@
 
 -- Reinitiate libunbound context, drops cache
 local function purge()
-	for id in pairs(waiting_queries) do cancel(id); end
-	if server_conn then server_conn:close(); end
+	if server_conn then
+		local old_unbound, old_server_conn = unbound, server_conn;
+		timer.add_task(30, function()
+			old_server_conn:close();
+			-- Blocking wait for any straggler queries to prevent "leak" of waiting_queries[] entries
+			old_unbound:wait();
+		end)
+	end
 	initialize();
 	return true;
 end