mirror of
https://mirror.skon.top/https://github.com/FFmpeg/FFmpeg
synced 2026-04-20 21:00:41 +08:00
fftools/ffmpeg_sched: fix race on SchFilterIn.send_finished
This logic was previously added to the scheduler. That commit added locking
(and rescheduling) when updating the corresponding `receive_finished` flag,
but missed doing the same for `send_finished`.
Fixes: fd1fd5850d
This commit is contained in:
@@ -2297,6 +2297,8 @@ static int send_to_filter(Scheduler *sch, SchFilterGraph *fg,
|
||||
if (frame)
|
||||
return tq_send(fg->queue, in_idx, frame);
|
||||
|
||||
pthread_mutex_lock(&sch->schedule_lock);
|
||||
|
||||
if (!fg->inputs[in_idx].send_finished) {
|
||||
fg->inputs[in_idx].send_finished = 1;
|
||||
tq_send_finish(fg->queue, in_idx);
|
||||
@@ -2304,7 +2306,11 @@ static int send_to_filter(Scheduler *sch, SchFilterGraph *fg,
|
||||
// close the control stream when all actual inputs are done
|
||||
if (atomic_fetch_add(&fg->nb_inputs_finished_send, 1) == fg->nb_inputs - 1)
|
||||
tq_send_finish(fg->queue, fg->nb_inputs);
|
||||
|
||||
schedule_update_locked(sch);
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&sch->schedule_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user