Bug 2578 - Assert "Internal collision but no packet in queue" unexpectedly triggered
Assert "Internal collision but no packet in queue" unexpectedly triggered
Status: RESOLVED FIXED
Product: ns-3
Classification: Unclassified
Component: wifi
ns-3-dev
All All
: P3 normal
Assigned To: sebastien.deronne
:
: 2579 (view as bug list)
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2016-12-09 15:16 UTC by sebastien.deronne
Modified: 2017-01-13 14:12 UTC (History)
2 users (show)

See Also:


Attachments
Proposed patch to fix (3.72 KB, patch)
2016-12-09 15:16 UTC, sebastien.deronne
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description sebastien.deronne 2016-12-09 15:16:34 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.
Comment 1 sebastien.deronne 2016-12-09 15:22:16 UTC
*** Bug 2579 has been marked as a duplicate of this bug. ***
Comment 2 sebastien.deronne 2016-12-18 08:54:43 UTC
I'd like to push the fix before next weekend
Comment 3 Tom Henderson 2016-12-20 00:48:31 UTC
(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?
Comment 4 sebastien.deronne 2016-12-21 15:46:19 UTC
(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.
Comment 5 sebastien.deronne 2017-01-02 02:50:31 UTC
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.
Comment 6 sebastien.deronne 2017-01-13 14:12:30 UTC
pushed in changeset 12527:2076ba3a8e96