fallbacksrc: Fix timeout scheduling

Other thread can schedule the timeout (e.g., unblock signal
or active pad change) while state lock is released

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1384>
This commit is contained in:
Seungha Yang 2023-11-09 01:45:51 +09:00 committed by Sebastian Dröge
parent 9250c592a7
commit 8a04a38631

View file

@ -3206,20 +3206,23 @@ impl FallbackSrc {
} else {
let mut state_guard = imp.state.lock();
let state = state_guard.as_mut().expect("no state");
if fallback_source {
assert!(state
.fallback_source
.as_ref()
.map(|s| s.restart_timeout.is_none())
.unwrap_or(true));
let source = if fallback_source {
if let Some(source) = &state.fallback_source {
source
} else {
return;
}
} else {
assert!(state.source.restart_timeout.is_none());
&state.source
};
if source.restart_timeout.is_none() {
imp.schedule_source_restart_timeout(
state,
gst::ClockTime::ZERO,
fallback_source,
);
}
imp.schedule_source_restart_timeout(
state,
gst::ClockTime::ZERO,
fallback_source,
);
}
});
})