diff --git a/RNS/Link.py b/RNS/Link.py index f65ce12..17ffb2b 100644 --- a/RNS/Link.py +++ b/RNS/Link.py @@ -935,7 +935,8 @@ class Link: request_id = RNS.Identity.truncated_hash(packed_request) request_data = unpacked_request - self.handle_request(request_id, request_data) + def job(): self.handle_request(request_id, request_data) + threading.Thread(target=job, daemon=True).start() else: RNS.log("Incoming request resource failed with status: "+RNS.hexrep([resource.status]), RNS.LOG_DEBUG) @@ -945,7 +946,8 @@ class Link: # is a file response, and we'll pass the open # file handle directly. if resource.has_metadata: - self.handle_response(resource.request_id, resource.data, resource.total_size, resource.size, metadata=resource.metadata) + def job(): self.handle_response(resource.request_id, resource.data, resource.total_size, resource.size, metadata=resource.metadata) + threading.Thread(target=job, daemon=True).start() # If not, we'll unpack the response data and # pass the unpacked structure to the handler @@ -954,7 +956,8 @@ class Link: unpacked_response = umsgpack.unpackb(packed_response) request_id = unpacked_response[0] response_data = unpacked_response[1] - self.handle_response(request_id, response_data, resource.total_size, resource.size) + def job(): self.handle_response(request_id, response_data, resource.total_size, resource.size) + threading.Thread(target=job, daemon=True).start() else: RNS.log("Incoming response resource failed with status: "+RNS.hexrep([resource.status]), RNS.LOG_DEBUG) @@ -1036,7 +1039,8 @@ class Link: packed_request = self.decrypt(packet.data) if packed_request != None: unpacked_request = umsgpack.unpackb(packed_request) - self.handle_request(request_id, unpacked_request) + def job(): self.handle_request(request_id, unpacked_request) + threading.Thread(target=job, daemon=True).start() self.__update_phy_stats(packet, query_shared=True) except Exception as e: RNS.log("Error occurred while handling request. The contained exception was: "+str(e), RNS.LOG_ERROR) @@ -1049,7 +1053,8 @@ class Link: request_id = unpacked_response[0] response_data = unpacked_response[1] transfer_size = len(umsgpack.packb(response_data))-2 - self.handle_response(request_id, response_data, transfer_size, transfer_size) + def job(): self.handle_response(request_id, response_data, transfer_size, transfer_size) + threading.Thread(target=job, daemon=True).start() self.__update_phy_stats(packet, query_shared=True) except Exception as e: RNS.log("Error occurred while handling response. The contained exception was: "+str(e), RNS.LOG_ERROR) @@ -1085,17 +1090,14 @@ class Link: pending_request.started_at = time.time() pending_request.response_resource_progress(response_resource) - elif self.resource_strategy == Link.ACCEPT_NONE: - pass + elif self.resource_strategy == Link.ACCEPT_NONE: pass elif self.resource_strategy == Link.ACCEPT_APP: if self.callbacks.resource != None: try: resource_advertisement = RNS.ResourceAdvertisement.unpack(packet.plaintext) resource_advertisement.link = self - if self.callbacks.resource(resource_advertisement): - RNS.Resource.accept(packet, self.callbacks.resource_concluded) - else: - RNS.Resource.reject(packet) + if self.callbacks.resource(resource_advertisement): RNS.Resource.accept(packet, self.callbacks.resource_concluded) + else: RNS.Resource.reject(packet) except Exception as e: RNS.log("Error while executing resource accept callback from "+str(self)+". The contained exception was: "+str(e), RNS.LOG_ERROR) elif self.resource_strategy == Link.ACCEPT_ALL: @@ -1482,14 +1484,12 @@ class RequestReceipt(): self.packet_receipt.callbacks.delivery(self.packet_receipt) if self.callbacks.progress != None: - try: - self.callbacks.progress(self) + try: self.callbacks.progress(self) except Exception as e: RNS.log("Error while executing response progress callback from "+str(self)+". The contained exception was: "+str(e), RNS.LOG_ERROR) if self.callbacks.response != None: - try: - self.callbacks.response(self) + try: self.callbacks.response(self) except Exception as e: RNS.log("Error while executing response received callback from "+str(self)+". The contained exception was: "+str(e), RNS.LOG_ERROR) diff --git a/RNS/Resource.py b/RNS/Resource.py index 593a63a..7f20bbc 100644 --- a/RNS/Resource.py +++ b/RNS/Resource.py @@ -882,7 +882,7 @@ class Resource: if self.received_count == self.total_parts and not self.assembly_lock: self.assembly_lock = True - self.assemble() + threading.Thread(target=self.assemble, daemon=True).start() elif self.outstanding_parts == 0: # TODO: Figure out if there is a mathematically # optimal way to adjust windows