T155: libbarrelfish: Implement event_queue_flush
authorMoritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Mon, 17 Aug 2015 08:11:54 +0000 (10:11 +0200)
committerMoritz Hoffmann <moritz.hoffmann@inf.ethz.ch>
Mon, 17 Aug 2015 08:40:28 +0000 (10:40 +0200)
Signed-off-by: Moritz Hoffmann <moritz.hoffmann@inf.ethz.ch>

include/barrelfish/event_queue.h
lib/barrelfish/event_queue.c

index 1d0d8bd..7fa31d7 100644 (file)
@@ -51,6 +51,7 @@ void event_queue_add(struct event_queue *q, struct event_queue_node *qn,
                      struct event_closure event);
 errval_t event_queue_cancel(struct event_queue *q, struct event_queue_node *qn);
 errval_t event_queue_trigger(struct event_queue *q);
+errval_t event_queue_flush(struct event_queue *q);
 
 __END_DECLS
 
index 1d392d5..39c0d39 100644 (file)
@@ -211,6 +211,26 @@ errval_t event_queue_cancel(struct event_queue *q, struct event_queue_node *qn)
 }
 
 /**
+ * \brief Flush all pending events from the event queue.
+ *
+ * \param q Event queue.
+ */
+errval_t
+event_queue_flush(struct event_queue *q) {
+
+    thread_mutex_lock(&q->mutex);
+
+    struct event_queue_node *qn;
+    do {
+        qn = next_event(q);
+    } while (qn);
+
+    thread_mutex_unlock(&q->mutex);
+
+    return SYS_ERR_OK;
+}
+
+/**
  * \brief Trigger the next event on a queue which is operating in one-shot mode
  *
  * Must not be called before the previously-triggered event has run.