In the case of single protection mechanism without txop, there's no need to look at the pending frame which is the one right after the next to be transmitted. Otherwise, the performance might be suboptimal, because the pending frame is extracted too early from the pending queue into the in-progress queue, and there's no way to modify or replace the frame later.
For example, when aggregation is used, extracting the pending frame unnecessarily early might result in suboptimal performance. The reason is that there are less number of frames in the pending queue at the time of extraction than at a later moment. In contrast, for protection during a txop where owning the channel is a must, extracting the pending frame is absolutely necessary.
Hmm, I might be wrong about the single protection mechanism. Looking at the code revealed that when it is used in a txop, it must protect for the pending data frame according to the specification.
In the case of single protection mechanism without txop, there's no need to look at the pending frame which is the one right after the next to be transmitted. Otherwise, the performance might be suboptimal, because the pending frame is extracted too early from the pending queue into the in-progress queue, and there's no way to modify or replace the frame later.
For example, when aggregation is used, extracting the pending frame unnecessarily early might result in suboptimal performance. The reason is that there are less number of frames in the pending queue at the time of extraction than at a later moment. In contrast, for protection during a txop where owning the channel is a must, extracting the pending frame is absolutely necessary.