From 577c980a6d283a0f38930f23c72d16d9c054ac74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 8 Apr 2020 15:26:35 +0300 Subject: [PATCH] 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. --- generic/threadshare/src/socket.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/generic/threadshare/src/socket.rs b/generic/threadshare/src/socket.rs index 790e977b..6bbc3dab 100644 --- a/generic/threadshare/src/socket.rs +++ b/generic/threadshare/src/socket.rs @@ -159,24 +159,23 @@ impl Socket { } } -impl Drop for Socket { +impl Drop for SocketInner { 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; } }