Fix hangs on ARQ sessions

This commit is contained in:
Pedro 2023-12-19 23:32:04 +01:00
parent 5d8554df08
commit 1027ea1b98
3 changed files with 4 additions and 2 deletions

View file

@ -70,12 +70,13 @@ class ARQSessionIRS(arq_session.ARQSession):
return match return match
def transmit_and_wait(self, frame, timeout, mode): def transmit_and_wait(self, frame, timeout, mode):
self.event_frame_received.clear()
self.transmit_frame(frame, mode) self.transmit_frame(frame, mode)
self.log(f"Waiting {timeout} seconds...") self.log(f"Waiting {timeout} seconds...")
if not self.event_frame_received.wait(timeout): if not self.event_frame_received.wait(timeout):
self.log("Timeout waiting for ISS. Session failed.") self.log("Timeout waiting for ISS. Session failed.")
self.set_state(IRS_State.FAILED) self.set_state(IRS_State.FAILED)
self.event_manager.send_arq_finished(False, self.id, self.dxcall, self.total_length, False) self.event_manager.send_arq_session_finished(False, self.id, self.dxcall, self.total_length, False)
def launch_transmit_and_wait(self, frame, timeout, mode): def launch_transmit_and_wait(self, frame, timeout, mode):
thread_wait = threading.Thread(target = self.transmit_and_wait, thread_wait = threading.Thread(target = self.transmit_and_wait,

View file

@ -60,6 +60,7 @@ class ARQSessionISS(arq_session.ARQSession):
else: burst = [frame_or_burst] else: burst = [frame_or_burst]
for f in burst: for f in burst:
self.transmit_frame(f, mode) self.transmit_frame(f, mode)
self.event_frame_received.clear()
self.log(f"Waiting {timeout} seconds...") self.log(f"Waiting {timeout} seconds...")
if self.event_frame_received.wait(timeout): if self.event_frame_received.wait(timeout):
return return

View file

@ -111,7 +111,7 @@ class TestARQSession(unittest.TestCase):
def testARQSessionLargePayload(self): def testARQSessionLargePayload(self):
# set Packet Error Rate (PER) / frame loss probability # set Packet Error Rate (PER) / frame loss probability
self.loss_probability = 10 self.loss_probability = 50
self.establishChannels() self.establishChannels()
params = { params = {