avl_delete_tree(event_tree);
}
+void flush_events(void)
+{
+ avl_tree_t *to_flush;
+ event_t *event;
+
+ /*
+ * Events can be inserted from event handlers, so only flush events
+ * already in the priority queue.
+ */
+
+ cp();
+
+ to_flush = event_tree;
+ init_events();
+ while (to_flush->head) {
+ event = to_flush->head->data;
+ event->handler(event->data);
+ avl_delete(to_flush, event);
+ }
+ avl_delete_tree(to_flush);
+}
+
event_t *new_event(void)
{
cp();
extern void init_events(void);
extern void exit_events(void);
+extern void flush_events(void);
extern event_t *new_event(void) __attribute__ ((__malloc__));
extern void free_event(event_t *);
extern void event_add(event_t *);
if(sigalrm) {
logger(LOG_INFO, _("Flushing event queue"));
-
- while(event_tree->head) {
- event = event_tree->head->data;
- event->handler(event->data);
- event_del(event);
- }
+ flush_events();
sigalrm = false;
}