|
|
@@ -96,11 +96,19 @@ int cs_etm_decoder__get_packet(struct cs_etm_decoder *decoder,
|
|
|
/* Nothing to do, might as well just return */
|
|
|
if (decoder->packet_count == 0)
|
|
|
return 0;
|
|
|
+ /*
|
|
|
+ * The queueing process in function cs_etm_decoder__buffer_packet()
|
|
|
+ * increments the tail *before* using it. This is somewhat counter
|
|
|
+ * intuitive but it has the advantage of centralizing tail management
|
|
|
+ * at a single location. Because of that we need to follow the same
|
|
|
+ * heuristic with the head, i.e we increment it before using its
|
|
|
+ * value. Otherwise the first element of the packet queue is not
|
|
|
+ * used.
|
|
|
+ */
|
|
|
+ decoder->head = (decoder->head + 1) & (MAX_BUFFER - 1);
|
|
|
|
|
|
*packet = decoder->packet_buffer[decoder->head];
|
|
|
|
|
|
- decoder->head = (decoder->head + 1) & (MAX_BUFFER - 1);
|
|
|
-
|
|
|
decoder->packet_count--;
|
|
|
|
|
|
return 1;
|