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]

Reply via email to