Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/videolan/dav1d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictorien Le Couviour--Tuffet <victorien@videolan.org>2022-10-06 12:14:06 +0300
committerVictorien Le Couviour--Tuffet <victorien@videolan.org>2022-10-20 15:23:30 +0300
commit3e7886db54d0cb3ce32909c71ad2a8c9d9eab223 (patch)
tree0bf03411882df77cb438f340a46479620fed6b5f /include/compat/gcc/stdatomic.h
parent5b07b4256617913ec81277f07af592ebd62b11a3 (diff)
threading: Fix a race around frame completion (frame-mt)
The completion of the first frame to decode while an async reset request on that same frame is pending will render it stale. The processing of such a stale request is likely to result in a hang. One reason this happens is the skip condition at the beginning of reset_task_cur(). => Consume the async request before that check. Another reason is several threads producing async reset requests in parallel: an async request for the first frame could cascade through the other threads (other frames) during completion of that frame, meaning not being caught by the last synchronous reset_task_cur() after signaling the main thread and before releasing the lock. => To solve this we need to add protections at the racy locations. That means after we increase first, before returning from reset_task_cur_async(), and after consuming the async request.
Diffstat (limited to 'include/compat/gcc/stdatomic.h')
0 files changed, 0 insertions, 0 deletions