# HG changeset patch # User Kim Alvefur # Date 1780161501 -7200 # Node ID 9c062f243d3aac24e3d570c8c41a31194dd77847 # Parent 23f1c71b3d56fb3e17566d17eedfe14d2008dbe6 net.unbound: Let in-flight queries complete after re-initialization This is meant to reduce potential disruption of in-flight queries on reload. diff -r 23f1c71b3d56 -r 9c062f243d3a net/unbound.lua --- 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