This is an automated email from the git hooks/post-receive script.
Git pushed a commit to branch master
in repository ffmpeg.
The following commit(s) were added to refs/heads/master by this push:
new a7e72069f1 avfilter/dnn: fix race when querying queue length
a7e72069f1 is described below
commit a7e72069f15efbef1e25b25d35c4e0511b43262e
Author: Guo Yejun <[email protected]>
AuthorDate: Sun Jul 26 16:25:58 2026 +0800
Commit: guoyejun <[email protected]>
CommitDate: Sun Aug 2 07:59:44 2026 +0000
avfilter/dnn: fix race when querying queue length
Replace av_usleep polling with a condition variable wait.
---
libavfilter/dnn/dnn_backend_common.c | 5 ++---
libavfilter/dnn/safe_queue.c | 11 +++++++++++
libavfilter/dnn/safe_queue.h | 8 ++++++++
3 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/libavfilter/dnn/dnn_backend_common.c
b/libavfilter/dnn/dnn_backend_common.c
index 4d6752ae33..82627c7a96 100644
--- a/libavfilter/dnn/dnn_backend_common.c
+++ b/libavfilter/dnn/dnn_backend_common.c
@@ -22,7 +22,6 @@
*/
#include "libavutil/mem.h"
-#include "libavutil/time.h"
#include "dnn_backend_common.h"
#define DNN_ASYNC_SUCCESS (void *)0
@@ -107,8 +106,8 @@ void ff_dnn_wait_requests(SafeQueue *request_queue, int
nireq)
{
if (!request_queue)
return;
- while (ff_safe_queue_size(request_queue) < nireq)
- av_usleep(10000);
+
+ ff_safe_queue_wait_for_size(request_queue, nireq);
}
int ff_dnn_start_inference_async(void *ctx, DNNAsyncExecModule *async_module)
diff --git a/libavfilter/dnn/safe_queue.c b/libavfilter/dnn/safe_queue.c
index e962d4cb7e..f7aa31d42e 100644
--- a/libavfilter/dnn/safe_queue.c
+++ b/libavfilter/dnn/safe_queue.c
@@ -82,6 +82,17 @@ size_t ff_safe_queue_size(SafeQueue *sq)
return sq ? ff_queue_size(sq->q) : 0;
}
+void ff_safe_queue_wait_for_size(SafeQueue *sq, size_t min_size)
+{
+ if (!sq)
+ return;
+
+ ff_mutex_lock(&sq->mutex);
+ while (ff_queue_size(sq->q) < min_size)
+ dnn_cond_wait(&sq->cond, &sq->mutex);
+ ff_mutex_unlock(&sq->mutex);
+}
+
int ff_safe_queue_push_front(SafeQueue *sq, void *v)
{
int ret;
diff --git a/libavfilter/dnn/safe_queue.h b/libavfilter/dnn/safe_queue.h
index 577a02e24d..b0b32d90e0 100644
--- a/libavfilter/dnn/safe_queue.h
+++ b/libavfilter/dnn/safe_queue.h
@@ -47,6 +47,14 @@ void ff_safe_queue_destroy(SafeQueue *sq);
*/
size_t ff_safe_queue_size(SafeQueue *sq);
+/**
+ * @brief Wait until queue length reaches at least min_size.
+ *
+ * @param sq pointer to the SafeQueue
+ * @param min_size target queue length
+ */
+void ff_safe_queue_wait_for_size(SafeQueue *sq, size_t min_size);
+
/**
* @brief Add data to the head of queue in the
* SafeQueue after locking mutex. After adding
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]