@@ -482,13 +482,19 @@ static void refreshEvents() {
482
482
} else {
483
483
if (osMutexWait (g_writeQueueMutexId, 5 ) == osOK) {
484
484
if (g_writeQueueFull || g_writeQueueTail != g_writeQueueHead) {
485
- int i = g_writeQueueTail ;
485
+ int i = g_writeQueueFull ? (g_writeQueueHead + 1 ) % WRITE_QUEUE_MAX_SIZE : g_writeQueueHead ;
486
486
do {
487
+ if (i > 0 ) {
488
+ i--;
489
+ } else {
490
+ i = WRITE_QUEUE_MAX_SIZE - 1 ;
491
+ }
492
+
487
493
if (getEventType (g_writeQueue[i].eventId ) >= g_filter) {
488
494
g_numEvents++;
489
495
}
490
- i = (i + 1 ) % WRITE_QUEUE_MAX_SIZE;
491
- } while (i != g_writeQueueHead );
496
+
497
+ } while (i != g_writeQueueTail );
492
498
}
493
499
494
500
g_refreshEvents = false ;
@@ -722,8 +728,14 @@ static void readEvents(uint32_t fromPosition) {
722
728
uint32_t j = 0 ;
723
729
uint32_t k = 0 ;
724
730
if (g_writeQueueFull || g_writeQueueTail != g_writeQueueHead) {
725
- uint32_t i = g_writeQueueTail ;
731
+ int i = g_writeQueueFull ? (g_writeQueueHead + 1 ) % WRITE_QUEUE_MAX_SIZE : g_writeQueueHead ;
726
732
do {
733
+ if (i > 0 ) {
734
+ i--;
735
+ } else {
736
+ i = WRITE_QUEUE_MAX_SIZE - 1 ;
737
+ }
738
+
727
739
int eventType = getEventType (g_writeQueue[i].eventId );
728
740
if (eventType >= g_filter) {
729
741
if (j >= fromPosition + k) {
@@ -739,8 +751,8 @@ static void readEvents(uint32_t fromPosition) {
739
751
}
740
752
j++;
741
753
}
742
- i = (i + 1 ) % WRITE_QUEUE_MAX_SIZE;
743
- } while (i != g_writeQueueHead );
754
+
755
+ } while (i != g_writeQueueTail );
744
756
}
745
757
746
758
osMutexRelease (g_writeQueueMutexId);
0 commit comments