mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-24 11:54:49 +00:00
Fix #1520 - move state to struct mg_mgr
This commit is contained in:
1 parent
66376885e9
commit
ef44f90491
24 files changed
+218
-276
No files matched your search
+39
-42
@@ -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, ...) {
|
||||
|
||||
Reference in new issue
Block a user