• 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.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=778830
    7b7a8098
Name
Last commit
Last update
common @ 39ac2f56 Loading commit data...
docs Loading commit data...
ext Loading commit data...
gst Loading commit data...
gst-libs/gst Loading commit data...
hooks Loading commit data...
m4 Loading commit data...
pkgconfig Loading commit data...
po Loading commit data...
sys Loading commit data...
tests Loading commit data...
.gitignore Loading commit data...
.gitmodules Loading commit data...
AUTHORS Loading commit data...
COPYING Loading commit data...
ChangeLog Loading commit data...
MAINTAINERS Loading commit data...
Makefile.am Loading commit data...
NEWS Loading commit data...
README Loading commit data...
README.static-linking Loading commit data...
RELEASE Loading commit data...
REQUIREMENTS Loading commit data...
autogen.sh Loading commit data...
config.h.meson Loading commit data...
configure.ac Loading commit data...
gst-plugins-good.doap Loading commit data...
meson.build Loading commit data...
meson_options.txt Loading commit data...