From c9101a0c21d2b41a7ed305fcc635a234a5f095b7 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sat, 18 Apr 2026 15:36:33 +0200 Subject: [PATCH] Ensure loop-originating closures have variables captured at iteration-time. Thanks @taprootmx! --- RNS/Link.py | 2 +- RNS/Transport.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/RNS/Link.py b/RNS/Link.py index 7835eae..e7bef23 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -1177,7 +1177,7 @@ class Link: resource_hash = packet.data[0:RNS.Identity.HASHLENGTH//8] for resource in self.outgoing_resources: if resource_hash == resource.hash: - def job(): resource.validate_proof(packet.data) + def job(resource=resource): resource.validate_proof(packet.data) threading.Thread(target=job, daemon=True).start() self.__update_phy_stats(packet, query_shared=True) diff --git a/RNS/Transport.py b/RNS/Transport.py index 4665de8..16a7e7f 100755 --- a/RNS/Transport.py +++ b/RNS/Transport.py @@ -1944,14 +1944,14 @@ class Transport: if execute_callback: if len(inspect.signature(handler.received_announce).parameters) == 3: - def job(): + def job(handler=handler, packet=packet, announce_identity=announce_identity): handler.received_announce(destination_hash=packet.destination_hash, announced_identity=announce_identity, app_data=RNS.Identity.recall_app_data(packet.destination_hash)) threading.Thread(target=job, daemon=True).start() elif len(inspect.signature(handler.received_announce).parameters) == 4: - def job(): + def job(handler=handler, packet=packet, announce_identity=announce_identity): handler.received_announce(destination_hash=packet.destination_hash, announced_identity=announce_identity, app_data=RNS.Identity.recall_app_data(packet.destination_hash), @@ -1959,7 +1959,7 @@ class Transport: threading.Thread(target=job, daemon=True).start() elif len(inspect.signature(handler.received_announce).parameters) == 5: - def job(): + def job(handler=handler, packet=packet, announce_identity=announce_identity): handler.received_announce(destination_hash=packet.destination_hash, announced_identity=announce_identity, app_data=RNS.Identity.recall_app_data(packet.destination_hash), @@ -2976,7 +2976,7 @@ class Transport: elif type(interface) == RNS.Interfaces.LocalInterface.LocalClientInterface: local_interfaces.append(interface) else: - def detach_job(): + def detach_job(interface=interface): RNS.log(f"Detaching {interface}", RNS.LOG_EXTREME) interface.detach() dt = threading.Thread(target=detach_job, daemon=False)