Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2020-04-08 15:26:35 +0300
committerSebastian Dröge <sebastian@centricular.com>2020-04-08 15:39:35 +0300
commit577c980a6d283a0f38930f23c72d16d9c054ac74 (patch)
treea19fc3b73e46deadc793d2edf4e41ec08ea9fff2 /generic/threadshare/src/socket.rs
parentf6120fcf9861614629469e03a48cfb4a6962c8ca (diff)
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.
Diffstat (limited to 'generic/threadshare/src/socket.rs')
-rw-r--r--generic/threadshare/src/socket.rs17
1 files changed, 8 insertions, 9 deletions
diff --git a/generic/threadshare/src/socket.rs b/generic/threadshare/src/socket.rs
index 790e977bc..6bbc3dab0 100644
--- a/generic/threadshare/src/socket.rs
+++ b/generic/threadshare/src/socket.rs
@@ -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) {
// Ready->Null
- let mut inner = self.0.lock().unwrap();
- assert_ne!(SocketState::Started, inner.state);
- if inner.state == SocketState::Unprepared {
- gst_debug!(SOCKET_CAT, obj: &inner.element, "Socket already unprepared");
+ assert_ne!(SocketState::Started, self.state);
+ if self.state == SocketState::Unprepared {
+ gst_debug!(SOCKET_CAT, obj: &self.element, "Socket already unprepared");
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();
}
- if let Err(err) = inner.buffer_pool.set_active(false) {
- gst_error!(SOCKET_CAT, obj: &inner.element, "Failed to unprepare socket: {}", err);
+ if let Err(err) = self.buffer_pool.set_active(false) {
+ gst_error!(SOCKET_CAT, obj: &self.element, "Failed to unprepare socket: {}", err);
}
- inner.state = SocketState::Unprepared;
+ self.state = SocketState::Unprepared;
}
}