diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2020-04-08 15:26:35 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2020-04-08 15:39:35 +0300 |
commit | 577c980a6d283a0f38930f23c72d16d9c054ac74 (patch) | |
tree | a19fc3b73e46deadc793d2edf4e41ec08ea9fff2 /generic/threadshare/src/socket.rs | |
parent | f6120fcf9861614629469e03a48cfb4a6962c8ca (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.rs | 17 |
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; } } |