Bugzilla – Bug 2578
Assert "Internal collision but no packet in queue" unexpectedly triggered
Last modified: 2017-01-13 14:12:30 UTC
Created attachment 2698 [details] Proposed patch to fix When an internal collision is detected, an assert is triggered if there is no packet in the queue. There are two issues according to me: 1) It does not consider the BA queue; 2) Packets that exceed their maximum lifetime limit are removed from the queue. If a packet is removed between the access request to the manager and the moment the internal collision is detected, this assert is triggered. In that case, the internal collision should actually have no effect on that EdcaTxopN and simulation should keep on running. See my proposed solution is attachment.
*** Bug 2579 has been marked as a duplicate of this bug. ***
I'd like to push the fix before next weekend
(In reply to sebastien.deronne from comment #0) > Created attachment 2698 [details] > Proposed patch to fix > > When an internal collision is detected, an assert is triggered if there is > no packet in the queue. > > There are two issues according to me: > 1) It does not consider the BA queue; > 2) Packets that exceed their maximum lifetime limit are removed from the > queue. If a packet is removed between the access request to the manager and > the moment the internal collision is detected, this assert is triggered. In > that case, the internal collision should actually have no effect on that > EdcaTxopN and simulation should keep on running. > > See my proposed solution is attachment. My read of this patch is that you still perform backoff for case 2) above even though there is no internal collision, is that correct?
(In reply to Tom Henderson from comment #3) > (In reply to sebastien.deronne from comment #0) > > Created attachment 2698 [details] > > Proposed patch to fix > > > > When an internal collision is detected, an assert is triggered if there is > > no packet in the queue. > > > > There are two issues according to me: > > 1) It does not consider the BA queue; > > 2) Packets that exceed their maximum lifetime limit are removed from the > > queue. If a packet is removed between the access request to the manager and > > the moment the internal collision is detected, this assert is triggered. In > > that case, the internal collision should actually have no effect on that > > EdcaTxopN and simulation should keep on running. > > > > See my proposed solution is attachment. > > My read of this patch is that you still perform backoff for case 2) above > even though there is no internal collision, is that correct? Not sure how to handle this case... If this occurs, it means it lost his packet because of the maximum lifetime limit, so at that point in time there is no packet in queue. Standard requests backoff for internal collision, but it assumes that the AC has a packet ready to be sent.
I suggest to still perform backoff for case 2, it seems more standard compliant and we do not drastically change our current behavior this way. I still see this issue quite often, so I'd like to deliver the fix this week.
pushed in changeset 12527:2076ba3a8e96