mtimer_t *_mtimer_ustart( int32_t usec, void (*callback)(void *user), void *user) { mtimer_t *n,*walk,*last; n = alloc_t(mtimer_t); n->expiration.tv_usec = g_tnow.tv_usec+usec; n->expiration.tv_sec = g_tnow.tv_sec; n->callback = callback; n->user = user; while (n->expiration.tv_usec > 1000000) { n->expiration.tv_usec -= 1000000; n->expiration.tv_sec++; } last = NULL; for (walk = timers; walk; walk = walk->next) if (walk->expiration.tv_sec > n->expiration.tv_sec || (walk->expiration.tv_sec == n->expiration.tv_sec && walk->expiration.tv_usec > n->expiration.tv_usec)) break; else last = walk; if (walk) Q_INSERT_BEFORE(timers,n,walk); else Q_INSERT_AFTER(timers,n,last); return n; }
mtimer_t *_mtimer_start( int32_t sec, void (*callback)(void *arg), void *arg ) { mtimer_t *n, *walk, *last; n = alloc_t(mtimer_t); n->expiration.tv_usec = g_tnow.tv_usec; n->expiration.tv_sec = g_tnow.tv_sec + sec; n->callback = callback; n->user = arg; last = NULL; for (walk = timers; walk; walk = walk->next) if (walk->expiration.tv_sec > n->expiration.tv_sec || (walk->expiration.tv_sec == n->expiration.tv_sec && walk->expiration.tv_usec > n->expiration.tv_usec)) break; else last = walk; if (walk) Q_INSERT_BEFORE(timers,n,walk); else Q_INSERT_AFTER(timers,n,last); return n; }
void queue_put(QUEUE *q,BUFFER *b) { Q_INSERT_AFTER(q->first,b,q->last); q->last = b; }