提交 db3e73d1 authored 作者: Serhij S's avatar Serhij S

removed unsafe code

上级 34a0990a
......@@ -17,6 +17,7 @@ nix = { version = "0.28.0", features = ["signal"] }
object-id = "0.1.3"
oneshot = { version = "0.1.6", default-features = false, features = ["std"] }
parking_lot = "0.12.1"
pin-project = "1.1.5"
serde = { version = "1.0.197", features = ["derive", "rc"] }
sysinfo = "0.30.6"
thiserror = "1.0.57"
......
......@@ -10,6 +10,7 @@ use std::{
use crate::{pdeque::Deque, DataDeliveryPolicy, Error, Result};
use object_id::UniqueId;
use parking_lot::Mutex;
use pin_project::{pin_project, pinned_drop};
type ClientId = usize;
......@@ -166,6 +167,7 @@ where
}
}
#[pin_project(PinnedDrop)]
struct Send<'a, T: DataDeliveryPolicy> {
id: UniqueId,
channel: &'a Channel<T>,
......@@ -173,8 +175,10 @@ struct Send<'a, T: DataDeliveryPolicy> {
value: Option<T>,
}
impl<'a, T: DataDeliveryPolicy> Drop for Send<'a, T> {
fn drop(&mut self) {
#[pinned_drop]
#[allow(clippy::needless_lifetimes)]
impl<'a, T: DataDeliveryPolicy> PinnedDrop for Send<'a, T> {
fn drop(self: Pin<&mut Self>) {
self.channel
.0
.pc
......@@ -196,11 +200,10 @@ where
if pc.receivers == 0 {
return Poll::Ready(Err(Error::ChannelClosed));
}
let this = unsafe { self.as_mut().get_unchecked_mut() };
if pc.send_fut_wakers.is_empty() || this.queued {
let push_result = pc.queue.try_push(this.value.take().unwrap());
if pc.send_fut_wakers.is_empty() || self.queued {
let push_result = pc.queue.try_push(self.value.take().unwrap());
if let Some(val) = push_result.value {
this.value = Some(val);
self.value = Some(val);
} else {
pc.notify_data_sent();
return Poll::Ready(if push_result.pushed {
......@@ -210,7 +213,7 @@ where
});
}
}
this.queued = true;
self.queued = true;
pc.append_send_fut_waker(cx.waker().clone(), self.id.as_usize());
Poll::Pending
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论