From f52f6dbe33d33be3d0aeeb90ffe73a1695c58a06 Mon Sep 17 00:00:00 2001 From: Alex Forencich Date: Sun, 21 Mar 2021 18:46:41 -0700 Subject: [PATCH] Trigger transmit complete events when flushing queue to prevent deadlocks --- cocotbext/eth/gmii.py | 4 +++- cocotbext/eth/mii.py | 4 +++- cocotbext/eth/rgmii.py | 4 +++- cocotbext/eth/xgmii.py | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cocotbext/eth/gmii.py b/cocotbext/eth/gmii.py index d614288..5c23624 100644 --- a/cocotbext/eth/gmii.py +++ b/cocotbext/eth/gmii.py @@ -203,7 +203,9 @@ class GmiiSource(Reset): def clear(self): while not self.queue.empty(): - self.queue.get_nowait() + frame = self.queue.get_nowait() + frame.sim_time_end = None + frame.handle_tx_complete() self.idle_event.set() self.queue_occupancy_bytes = 0 self.queue_occupancy_frames = 0 diff --git a/cocotbext/eth/mii.py b/cocotbext/eth/mii.py index a763d31..3e88561 100644 --- a/cocotbext/eth/mii.py +++ b/cocotbext/eth/mii.py @@ -104,7 +104,9 @@ class MiiSource(Reset): def clear(self): while not self.queue.empty(): - self.queue.get_nowait() + frame = self.queue.get_nowait() + frame.sim_time_end = None + frame.handle_tx_complete() self.idle_event.set() self.queue_occupancy_bytes = 0 self.queue_occupancy_frames = 0 diff --git a/cocotbext/eth/rgmii.py b/cocotbext/eth/rgmii.py index 1c8cf95..3bdbce6 100644 --- a/cocotbext/eth/rgmii.py +++ b/cocotbext/eth/rgmii.py @@ -104,7 +104,9 @@ class RgmiiSource(Reset): def clear(self): while not self.queue.empty(): - self.queue.get_nowait() + frame = self.queue.get_nowait() + frame.sim_time_end = None + frame.handle_tx_complete() self.idle_event.set() self.queue_occupancy_bytes = 0 self.queue_occupancy_frames = 0 diff --git a/cocotbext/eth/xgmii.py b/cocotbext/eth/xgmii.py index c417d70..0b468d2 100644 --- a/cocotbext/eth/xgmii.py +++ b/cocotbext/eth/xgmii.py @@ -209,7 +209,9 @@ class XgmiiSource(Reset): def clear(self): while not self.queue.empty(): - self.queue.get_nowait() + frame = self.queue.get_nowait() + frame.sim_time_end = None + frame.handle_tx_complete() self.idle_event.set() self.queue_occupancy_bytes = 0 self.queue_occupancy_frames = 0