700: Add back support for cloning sender/receiver r=Dirbaio a=lulf

The automatic derive clone does not work because RawMutex is not Clone.

Co-authored-by: Ulf Lilleengen <lulf@redhat.com>
This commit is contained in:
bors[bot] 2022-04-07 19:27:36 +00:00 committed by GitHub
commit 637ec36f9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 2 deletions

View File

@ -28,7 +28,7 @@ use crate::blocking_mutex::Mutex;
use crate::waitqueue::WakerRegistration;
/// Send-only access to a [`Channel`].
#[derive(Copy, Clone)]
#[derive(Copy)]
pub struct Sender<'ch, M, T, const N: usize>
where
M: RawMutex,
@ -36,6 +36,17 @@ where
channel: &'ch Channel<M, T, N>,
}
impl<'ch, M, T, const N: usize> Clone for Sender<'ch, M, T, N>
where
M: RawMutex,
{
fn clone(&self) -> Self {
Sender {
channel: self.channel,
}
}
}
impl<'ch, M, T, const N: usize> Sender<'ch, M, T, N>
where
M: RawMutex,
@ -56,7 +67,7 @@ where
}
/// Receive-only access to a [`Channel`].
#[derive(Copy, Clone)]
#[derive(Copy)]
pub struct Receiver<'ch, M, T, const N: usize>
where
M: RawMutex,
@ -64,6 +75,17 @@ where
channel: &'ch Channel<M, T, N>,
}
impl<'ch, M, T, const N: usize> Clone for Receiver<'ch, M, T, N>
where
M: RawMutex,
{
fn clone(&self) -> Self {
Receiver {
channel: self.channel,
}
}
}
impl<'ch, M, T, const N: usize> Receiver<'ch, M, T, N>
where
M: RawMutex,
@ -379,6 +401,16 @@ mod tests {
assert_eq!(c.try_recv().unwrap(), 1);
}
#[test]
fn cloning() {
let c = Channel::<NoopRawMutex, u32, 3>::new();
let r1 = c.receiver();
let s1 = c.sender();
let _ = r1.clone();
let _ = s1.clone();
}
#[futures_test::test]
async fn receiver_receives_given_try_send_async() {
let executor = ThreadPool::new().unwrap();

View File

@ -1,4 +1,7 @@
//! Async channels
pub mod channel;
pub use channel::*;
pub mod signal;
pub use signal::*;