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 e3e4a109f9
commit c86d5c78f4

View file

@ -106,6 +106,8 @@ enum Status {
Running,
/// the element stopped because of an error
Error,
/// the element is being shut down
ShuttingDown,
}
impl Status {
@ -113,7 +115,7 @@ impl Status {
fn done(&self) -> bool {
match self {
Status::Running => false,
Status::Error => true,
Status::Error | Status::ShuttingDown => true,
}
}
}
@ -951,6 +953,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.