mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-09-28 14:52:15 +00:00
threadshare/socket: Implement Drop on the non-refcounted inner part of the socket
We don't want to run it every time a strong reference is dropped but only at the very end. Otherwise dropping the socket stream will cause a panic because the socket itself is still running.
This commit is contained in:
parent
f6120fcf98
commit
577c980a6d
1 changed files with 8 additions and 9 deletions
|
@ -159,24 +159,23 @@ impl<T: SocketRead + 'static> Socket<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: SocketRead> Drop for Socket<T> {
|
impl<T: SocketRead> Drop for SocketInner<T> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
// Ready->Null
|
// Ready->Null
|
||||||
let mut inner = self.0.lock().unwrap();
|
assert_ne!(SocketState::Started, self.state);
|
||||||
assert_ne!(SocketState::Started, inner.state);
|
if self.state == SocketState::Unprepared {
|
||||||
if inner.state == SocketState::Unprepared {
|
gst_debug!(SOCKET_CAT, obj: &self.element, "Socket already unprepared");
|
||||||
gst_debug!(SOCKET_CAT, obj: &inner.element, "Socket already unprepared");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(create_read_handle_handle) = inner.create_read_handle.take() {
|
if let Some(create_read_handle_handle) = self.create_read_handle.take() {
|
||||||
create_read_handle_handle.abort();
|
create_read_handle_handle.abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Err(err) = inner.buffer_pool.set_active(false) {
|
if let Err(err) = self.buffer_pool.set_active(false) {
|
||||||
gst_error!(SOCKET_CAT, obj: &inner.element, "Failed to unprepare socket: {}", err);
|
gst_error!(SOCKET_CAT, obj: &self.element, "Failed to unprepare socket: {}", err);
|
||||||
}
|
}
|
||||||
inner.state = SocketState::Unprepared;
|
self.state = SocketState::Unprepared;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue