summaryrefslogtreecommitdiffstats
path: root/ffd/queue.h
diff options
context:
space:
mode:
Diffstat (limited to 'ffd/queue.h')
-rw-r--r--ffd/queue.h22
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;