• Thibault Saunier's avatar
    v4l2dec: Fix race when going from PAUSED to READY · 7b7a8098
    Thibault Saunier authored
    Running `gst-validate-launcher -t validate.file.playback.change_state_intensive.vorbis_vp8_1_webm`
    on odroid XU4 (s5p-mfc v4l2 driver) often leads to:
      ERROR:../subprojects/gst-plugins-good/sys/v4l2/gstv4l2videodec.c:215:gst_v4l2_video_dec_stop: assertion failed: (g_atomic_int_get (&self->processing) == FALSE)
    This happens when the following race happens:
    - T0: Main thread
    - T1: Upstream streaming thread
    - T2. v4l2dec processing thread)
    [The decoder is in PAUSED state]
    T0. The validate scenario runs `Executing (36/40) set-state: state=null repeat=40`
    T1- The decoder handles a frame
    T2- A decoded frame is push downstream
    T2- Downstream returns FLUSHING as it is already flushing changing state
    T2- The decoder stops its processing thread and sets `->processing = FALSE`
    T1- The decoder handles another frame
    T1- `->process` is FALSE so the decoder restarts its streaming thread
    T0- In v4l2dec-> stop the processing thread is stopped
    NOTE: At this point the processing thread loop never started.
    T0- assertion failed: (g_atomic_int_get (&self->processing) == FALSE)
    Here I am removing the whole ->processing logic to base it all on the
    GstTask state to avoid duplicating the knowledge.
Last commit
Last update
directsound Loading commit data...
oss Loading commit data...
oss4 Loading commit data...
osxaudio Loading commit data...
osxvideo Loading commit data...
sunaudio Loading commit data...
v4l2 Loading commit data...
waveform Loading commit data...
ximage Loading commit data...
Makefile.am Loading commit data...
meson.build Loading commit data...