uriplaylistbin: add Status::ShuttingDown

Fix a race where we were trying to process new decodedin pads while the
element was being shutdown, resulting in a dead lock.
This commit is contained in:
Guillaume Desmottes 2022-04-08 11:23:31 +02:00
parent 0ed72a360d
commit 69ceaa3a5e

View file

@ -105,6 +105,8 @@ enum Status {
Running,
/// the element stopped because of an error
Error,
/// the element is being shut down
ShuttingDown,
}
impl Status {
@ -112,7 +114,7 @@ impl Status {
fn done(&self) -> bool {
match self {
Status::Running => false,
Status::Error => true,
Status::Error | Status::ShuttingDown => true,
}
}
}
@ -950,6 +952,8 @@ impl ElementImpl for UriPlaylistBin {
let mut state_guard = self.state.lock().unwrap();
let state = state_guard.as_mut().unwrap();
state.status = Status::ShuttingDown;
// The probe callback owns a ref on the item and so on the sender as well.
// As a result we have to explicitly unblock all receivers as dropping the sender
// is not enough.