Follow-up from #537 (Devin Review).
The EOS-flush idle watchdog added in #537 only arms on the shared post-input-close drain (drain_codec_results). SVT-AV1 also flushes and joins the previous receive thread on a dimension change, inside the blocking codec task (crates/nodes/src/video/svt_av1.rs), and that join remains unbounded.
The CI flake fixed in #537 (svt_av1_colorbars) is a fixed-resolution oneshot with no dimension change, so #537 addresses that path. But if the same native two-thread deadlock can occur during a mid-stream dimension change, it would not be bounded by the current watchdog and could still hang.
Worth investigating whether the dimension-change flush path needs the same bounded-join treatment.
Follow-up from #537 (Devin Review).
The EOS-flush idle watchdog added in #537 only arms on the shared post-input-close drain (
drain_codec_results). SVT-AV1 also flushes and joins the previous receive thread on a dimension change, inside the blocking codec task (crates/nodes/src/video/svt_av1.rs), and that join remains unbounded.The CI flake fixed in #537 (
svt_av1_colorbars) is a fixed-resolution oneshot with no dimension change, so #537 addresses that path. But if the same native two-thread deadlock can occur during a mid-stream dimension change, it would not be bounded by the current watchdog and could still hang.Worth investigating whether the dimension-change flush path needs the same bounded-join treatment.