Skip to content

1.3.9-beta release - #19

Merged
Core447 merged 31 commits into
mainfrom
dev
Apr 1, 2024
Merged

Core447 merged 31 commits into
mainfrom
dev

Conversation

@Core447

@Core447 Core447 commented Apr 1, 2024

Copy link
Copy Markdown
Member

No description provided.

@Core447
Core447 merged commit b6f13bf into main Apr 1, 2024
nazbert added a commit to nazbert/Deckard that referenced this pull request Jul 12, 2026
…reamController#19)

close() (load/teardown threads via close_resources()) nulled
self.video_cache while a render tick could be between its multiple
video_cache reads -> AttributeError on None (logged via the
action-callback catch). Worse than the logged error: a get_frame() that
merely STARTS after the reader is released can resurrect a
cv2.VideoCapture through Mp4FrameCache._maybe_adopt_shared_cache and
leak it, so a bare snapshot isn't enough. Add a per-instance lock with a
check-then-hold pattern: an unlocked None peek keeps post-close
stragglers free, the body holds the lock for the whole pick+decode so
close() waits for an in-flight frame, and no frame begins against a
released reader. Uncontended acquire per tick is noise next to the
frame decode; close() stays idempotent.

Test: tests/scenario_keyvideo_close_race.py (150-round close-vs-tick
hammer over a sleep-widened stub cache: no exceptions, zero cache
accesses after release, quiet None afterwards; plus a real
mp4_tile_cache-registry InputVideo closed under concurrent ticks).
scenario_keyvideo_build's __new__ factory sets the new lock.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant