Skip to content

Commit 0728abf

Browse files
committed
Use Unpin for Queue
1 parent f3d3e9d commit 0728abf

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/queue.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ use crate::shim::*;
44
use crate::units::*;
55
use crate::isr::*;
66

7-
unsafe impl<T: Sized + Copy> Send for Queue<T> {}
8-
unsafe impl<T: Sized + Copy> Sync for Queue<T> {}
7+
unsafe impl<T: Sized + Unpin> Send for Queue<T> {}
8+
unsafe impl<T: Sized + Unpin> Sync for Queue<T> {}
99

1010
/// A queue with a finite size. The items are owned by the queue and are
1111
/// copied.
1212
#[derive(Debug)]
13-
pub struct Queue<T: Sized + Copy> {
13+
pub struct Queue<T: Sized + Unpin> {
1414
queue: FreeRtosQueueHandle,
1515
item_type: PhantomData<T>,
1616
}
1717

18-
impl<T: Sized + Copy> Queue<T> {
18+
impl<T: Sized + Unpin> Queue<T> {
1919
pub fn new(max_size: usize) -> Result<Queue<T>, FreeRtosError> {
2020

2121
let item_size = mem::size_of::<T>();
@@ -31,9 +31,8 @@ impl<T: Sized + Copy> Queue<T> {
3131
item_type: PhantomData,
3232
})
3333
}
34-
35-
36-
pub unsafe fn uninitialized() -> Self {
34+
35+
pub const unsafe fn uninitialized() -> Self {
3736
Self {
3837
queue: core::ptr::null(),
3938
item_type: PhantomData,
@@ -48,6 +47,7 @@ impl<T: Sized + Copy> Queue<T> {
4847
max_wait.to_ticks()) != 0 {
4948
Err(FreeRtosError::QueueSendTimeout)
5049
} else {
50+
core::mem::forget(item);
5151
Ok(())
5252
}
5353
}
@@ -85,7 +85,7 @@ impl<T: Sized + Copy> Queue<T> {
8585
}
8686
}
8787

88-
impl<T: Sized + Copy> Drop for Queue<T> {
88+
impl<T: Sized + Unpin> Drop for Queue<T> {
8989
fn drop(&mut self) {
9090
unsafe {
9191
freertos_rs_queue_delete(self.queue);

0 commit comments

Comments
 (0)