diff options
Diffstat (limited to 'ffd/queue.h')
-rw-r--r-- | ffd/queue.h | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/ffd/queue.h b/ffd/queue.h index 9fae53d..f9b8008 100644 --- a/ffd/queue.h +++ b/ffd/queue.h @@ -32,26 +32,32 @@ typedef void (*ffd_queue_cb)(const struct timespec *timeout, void *arg); -typedef struct _ffd_queue_head { - struct _ffd_queue_head *next; +struct _ffd_queue_t { + ffd_queue_t *next; ffd_queue_cb cb; struct timespec timeout; void *arg; -} ffd_queue_head; +}; -void ffd_queue_put(ffd_queue_head **queue, ffd_queue_cb cb, const struct timespec *timeout, void *arg); +void ffd_queue_put(ffd_queue_t **queue, ffd_queue_cb cb, const struct timespec *timeout, void *arg); -static inline void ffd_queue_put_delayed(ffd_queue_head **queue, ffd_queue_cb cb, const struct timespec *timeout, int delay, void *arg) { +static inline void ffd_queue_put_delayed(ffd_queue_t **queue, ffd_queue_cb cb, const struct timespec *timeout, int delay, void *arg) { struct timespec timeout_delayed = *timeout; add_interval(&timeout_delayed, delay); ffd_queue_put(queue, cb, &timeout_delayed, arg); } -static inline void ffd_queue_run(ffd_queue_head **queue) { +static inline void ffd_queue_drop(ffd_queue_t **queue) { + ffd_queue_t *entry = *queue; + *queue = entry->next; + free(entry); +} + +static inline void ffd_queue_run(ffd_queue_t **queue) { while (*queue && timespec_after(&now, &(*queue)->timeout)) { - ffd_queue_head *entry = *queue; + ffd_queue_t *entry = *queue; *queue = (*queue)->next; entry->cb(&entry->timeout, entry->arg); @@ -59,7 +65,7 @@ static inline void ffd_queue_run(ffd_queue_head **queue) { } } -static inline int ffd_queue_timeout(ffd_queue_head *const *queue) { +static inline int ffd_queue_timeout(ffd_queue_t *const *queue) { if (!*queue) return -1; |