Fix #1520 - move state to struct mg_mgr

This commit is contained in:
Sergey Lyubka committed 2022-04-12 14:14:55 +01:00
1 parent 66376885e9
commit ef44f90491
24 files changed
+218 -276

No files matched your search

+39 -42
View File
@@ -1140,103 +1140,100 @@ static void f1(void *arg) {
static void test_timer(void) {
int v1 = 0, v2 = 0, v3 = 0;
struct mg_timer t1, t2, t3;
struct mg_timer t1, t2, t3, *head = NULL;
MG_INFO(("g_timers: %p", g_timers));
ASSERT(g_timers == NULL);
mg_timer_init(&head, &t1, 5, MG_TIMER_REPEAT, f1, &v1);
mg_timer_init(&head, &t2, 15, 0, f1, &v2);
mg_timer_init(&head, &t3, 10, MG_TIMER_REPEAT | MG_TIMER_RUN_NOW, f1, &v3);
mg_timer_init(&t1, 5, MG_TIMER_REPEAT, f1, &v1);
mg_timer_init(&t2, 15, 0, f1, &v2);
mg_timer_init(&t3, 10, MG_TIMER_REPEAT | MG_TIMER_RUN_NOW, f1, &v3);
ASSERT(head == &t3);
ASSERT(head->next == &t2);
ASSERT(g_timers == &t3);
ASSERT(g_timers->next == &t2);
mg_timer_poll(0);
mg_timer_poll(1);
mg_timer_poll(&head, 0);
mg_timer_poll(&head, 1);
ASSERT(v1 == 0);
ASSERT(v2 == 0);
ASSERT(v3 == 1);
mg_timer_poll(5);
mg_timer_poll(&head, 5);
ASSERT(v1 == 1);
ASSERT(v2 == 0);
ASSERT(v3 == 1);
ASSERT(g_timers == &t3);
ASSERT(g_timers->next == &t2);
ASSERT(head == &t3);
ASSERT(head->next == &t2);
// Simulate long delay - timers must invalidate expiration times
mg_timer_poll(100);
mg_timer_poll(&head, 100);
ASSERT(v1 == 2);
ASSERT(v2 == 1);
ASSERT(v3 == 2);
ASSERT(g_timers == &t3);
ASSERT(g_timers->next == &t1); // t2 should be removed
ASSERT(g_timers->next->next == NULL);
ASSERT(head == &t3);
ASSERT(head->next == &t1); // t2 should be removed
ASSERT(head->next->next == NULL);
mg_timer_poll(107);
mg_timer_poll(&head, 107);
ASSERT(v1 == 3);
ASSERT(v2 == 1);
ASSERT(v3 == 2);
mg_timer_poll(114);
mg_timer_poll(&head, 114);
ASSERT(v1 == 4);
ASSERT(v2 == 1);
ASSERT(v3 == 3);
mg_timer_poll(115);
mg_timer_poll(&head, 115);
ASSERT(v1 == 5);
ASSERT(v2 == 1);
ASSERT(v3 == 3);
mg_timer_init(&t2, 3, 0, f1, &v2);
ASSERT(g_timers == &t2);
ASSERT(g_timers->next == &t3);
ASSERT(g_timers->next->next == &t1);
ASSERT(g_timers->next->next->next == NULL);
mg_timer_init(&head, &t2, 3, 0, f1, &v2);
ASSERT(head == &t2);
ASSERT(head->next == &t3);
ASSERT(head->next->next == &t1);
ASSERT(head->next->next->next == NULL);
mg_timer_poll(120);
mg_timer_poll(&head, 120);
ASSERT(v1 == 6);
ASSERT(v2 == 1);
ASSERT(v3 == 4);
mg_timer_poll(125);
mg_timer_poll(&head, 125);
ASSERT(v1 == 7);
ASSERT(v2 == 2);
ASSERT(v3 == 4);
// Test millisecond counter wrap - when time goes back.
mg_timer_poll(0);
mg_timer_poll(&head, 0);
ASSERT(v1 == 7);
ASSERT(v2 == 2);
ASSERT(v3 == 4);
ASSERT(g_timers == &t3);
ASSERT(g_timers->next == &t1);
ASSERT(g_timers->next->next == NULL);
ASSERT(head == &t3);
ASSERT(head->next == &t1);
ASSERT(head->next->next == NULL);
mg_timer_poll(7);
mg_timer_poll(&head, 7);
ASSERT(v1 == 8);
ASSERT(v2 == 2);
ASSERT(v3 == 4);
mg_timer_poll(11);
mg_timer_poll(&head, 11);
ASSERT(v1 == 9);
ASSERT(v2 == 2);
ASSERT(v3 == 5);
mg_timer_free(&t1);
ASSERT(g_timers == &t3);
ASSERT(g_timers->next == NULL);
mg_timer_free(&head, &t1);
ASSERT(head == &t3);
ASSERT(head->next == NULL);
mg_timer_free(&t2);
ASSERT(g_timers == &t3);
ASSERT(g_timers->next == NULL);
mg_timer_free(&head, &t2);
ASSERT(head == &t3);
ASSERT(head->next == NULL);
mg_timer_free(&t3);
ASSERT(g_timers == NULL);
mg_timer_free(&head, &t3);
ASSERT(head == NULL);
}
static bool sn(const char *fmt, ...) {