aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2017-10-22 17:38:30 +0200
committerNicolai Hähnle <[email protected]>2017-11-09 11:37:39 +0100
commit574c59d4f935cccfa18f7054c660200f8be791ad (patch)
treeb54d5075269299d19d8e194c0d3b921fbb689fea /src
parent1b9d5ece557bc4ac1d69cc133dc533bb5a863dde (diff)
u_queue: add util_queue_fence_reset
Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/util/u_queue.c4
-rw-r--r--src/util/u_queue.h13
2 files changed, 14 insertions, 3 deletions
diff --git a/src/util/u_queue.c b/src/util/u_queue.c
index 33436e0749a..2272006042f 100644
--- a/src/util/u_queue.c
+++ b/src/util/u_queue.c
@@ -328,8 +328,6 @@ util_queue_add_job(struct util_queue *queue,
{
struct util_queue_job *ptr;
- assert(fence->signalled);
-
mtx_lock(&queue->lock);
if (queue->kill_threads) {
mtx_unlock(&queue->lock);
@@ -339,7 +337,7 @@ util_queue_add_job(struct util_queue *queue,
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 5a546e53fdc..a3e12260e30 100644
--- a/src/util/u_queue.h
+++ b/src/util/u_queue.h
@@ -59,6 +59,19 @@ void util_queue_fence_destroy(struct util_queue_fence *fence);
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)
{