From: Luiz Augusto von Dentz <redacted>
It seems timer_sub can produce negative values leading to median packet
latency to be negative e.g conn->last_tx_compl is ahead of
conn->last_tx, in which case it should be discarded.
---
monitor/analyze.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/monitor/analyze.c b/monitor/analyze.c
index 5e0957ad1..d504c8d84 100644
--- a/monitor/analyze.c
+++ b/monitor/analyze.c
@@ -386,8 +386,9 @@ static void evt_num_completed_packets(struct hci_dev *dev, struct timeval *tv,
if (timerisset(&conn->last_tx)) {
timersub(&conn->last_tx_comp, &conn->last_tx, &res);
- if (!timerisset(&conn->tx_lat_min) ||
- timercmp(&res, &conn->tx_lat_min, <))
+ if ((!timerisset(&conn->tx_lat_min) ||
+ timercmp(&res, &conn->tx_lat_min, <)) &&
+ res.tv_sec >= 0 && res.tv_usec >= 0)
conn->tx_lat_min = res;
if (!timerisset(&conn->tx_lat_max) ||@@ -408,6 +409,8 @@ static void evt_num_completed_packets(struct hci_dev *dev, struct timeval *tv,
tmp.tv_usec -= 1000000;
}
}
+
+ conn->tx_lat_med = tmp;
} else
conn->tx_lat_med = res;
--
2.31.1