X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=lib-sys%2Fevtloop.c;h=a28c9b872844b6fddb6b4a9bdc405b0763bad2c9;hb=852725f1307961ba31e4f1470d8b834e4b7a6754;hp=3ecfb57e0c59d04983001309bc532e63cc3879f0;hpb=9a5f2da8f1779dc7cbb550c0b54ed9eb82b4d594;p=apps%2Fmadmutt.git diff --git a/lib-sys/evtloop.c b/lib-sys/evtloop.c index 3ecfb57..a28c9b8 100644 --- a/lib-sys/evtloop.c +++ b/lib-sys/evtloop.c @@ -17,6 +17,7 @@ * Copyright © 2006 Pierre Habouzit */ +#include #include #include #ifndef EPOLLRDHUP @@ -309,6 +310,7 @@ int el_dispatch(int timeout) int event = events[count].events; int evt = 0; + gettimeofday(&w->mru, NULL); switch (w->state) { case EL_LLP_INIT: w->llp(w); @@ -337,6 +339,29 @@ int el_dispatch(int timeout) return 0; } +void *el_loop(void *data) +{ + time_t sec = time(NULL); + + for (;;) { + struct timeval now; + + el_dispatch(100); + pthread_testcancel(); + + gettimeofday(&now, NULL); + if (sec >= now.tv_sec) + continue; + sec = now.tv_sec; + now.tv_sec -= 10; + for (int i = jobs.len - 1; i >= 0; --i) { + job_t *w = jobs.arr[i]; + if (timercmp(&now, &w->mru, >)) + IGNORE(w->m->on_event(w, EL_EVT_WAKEUP)); + } + } +} + void el_initialize(void) { gnutls_global_init();