fallbacksrc: Don't panic during retries if the element was shut down in parallel

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/2451>
This commit is contained in:
Sebastian Dröge 2025-08-11 14:30:42 +03:00
parent 9861f682e6
commit a41a6954fc

View file

@ -1741,7 +1741,9 @@ impl FallbackSrc {
if transition != gst::StateChange::ReadyToNull {
let _ = source.set_state(gst::State::Null);
let mut state_guard = self.state.lock();
let state = state_guard.as_mut().expect("no state");
let Some(ref mut state) = &mut *state_guard else {
return;
};
self.handle_source_error(
state,
RetryReason::StateChangeFailure,
@ -1761,7 +1763,9 @@ impl FallbackSrc {
);
let mut state_guard = self.state.lock();
let state = state_guard.as_mut().expect("no state");
let Some(ref mut state) = &mut *state_guard else {
return;
};
let source = if fallback_source {
if let Some(ref mut source) = state.fallback_source {
@ -4175,7 +4179,9 @@ impl FallbackSrc {
);
let _ = source.set_state(gst::State::Null);
let mut state_guard = imp.state.lock();
let state = state_guard.as_mut().expect("no state");
let Some(ref mut state) = &mut *state_guard else {
return;
};
imp.handle_source_error(
state,
RetryReason::StateChangeFailure,
@ -4185,7 +4191,9 @@ impl FallbackSrc {
element.notify("statistics");
} else {
let mut state_guard = imp.state.lock();
let state = state_guard.as_mut().expect("no state");
let Some(ref mut state) = &mut *state_guard else {
return;
};
let source = if fallback_source {
if let Some(source) = &state.fallback_source {
source