u_queue: add util_queue_fence_reset

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
diff --git a/src/util/u_queue.c b/src/util/u_queue.c
index 33436e0..2272006 100644
--- a/src/util/u_queue.c
+++ b/src/util/u_queue.c
@@ -328,8 +328,6 @@
 {
    struct util_queue_job *ptr;
 
-   assert(fence->signalled);
-
    mtx_lock(&queue->lock);
    if (queue->kill_threads) {
       mtx_unlock(&queue->lock);
@@ -339,7 +337,7 @@
       return;
    }
 
-   fence->signalled = false;
+   util_queue_fence_reset(fence);
 
    assert(queue->num_queued >= 0 && queue->num_queued <= queue->max_jobs);
 
diff --git a/src/util/u_queue.h b/src/util/u_queue.h
index 5a546e5..a3e1226 100644
--- a/src/util/u_queue.h
+++ b/src/util/u_queue.h
@@ -59,6 +59,19 @@
 void util_queue_fence_wait(struct util_queue_fence *fence);
 void util_queue_fence_signal(struct util_queue_fence *fence);
 
+/**
+ * Move \p fence back into unsignalled state.
+ *
+ * \warning The caller must ensure that no other thread may currently be
+ *          waiting (or about to wait) on the fence.
+ */
+static inline void
+util_queue_fence_reset(struct util_queue_fence *fence)
+{
+   assert(fence->signalled);
+   fence->signalled = 0;
+}
+
 static inline bool
 util_queue_fence_is_signalled(struct util_queue_fence *fence)
 {