@@ -4,18 +4,18 @@ use crate::shim::*;
4
4
use crate :: units:: * ;
5
5
use crate :: isr:: * ;
6
6
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 > { }
9
9
10
10
/// A queue with a finite size. The items are owned by the queue and are
11
11
/// copied.
12
12
#[ derive( Debug ) ]
13
- pub struct Queue < T : Sized + Copy > {
13
+ pub struct Queue < T : Sized + Unpin > {
14
14
queue : FreeRtosQueueHandle ,
15
15
item_type : PhantomData < T > ,
16
16
}
17
17
18
- impl < T : Sized + Copy > Queue < T > {
18
+ impl < T : Sized + Unpin > Queue < T > {
19
19
pub fn new ( max_size : usize ) -> Result < Queue < T > , FreeRtosError > {
20
20
21
21
let item_size = mem:: size_of :: < T > ( ) ;
@@ -31,9 +31,8 @@ impl<T: Sized + Copy> Queue<T> {
31
31
item_type : PhantomData ,
32
32
} )
33
33
}
34
-
35
-
36
- pub unsafe fn uninitialized ( ) -> Self {
34
+
35
+ pub const unsafe fn uninitialized ( ) -> Self {
37
36
Self {
38
37
queue : core:: ptr:: null ( ) ,
39
38
item_type : PhantomData ,
@@ -48,6 +47,7 @@ impl<T: Sized + Copy> Queue<T> {
48
47
max_wait. to_ticks ( ) ) != 0 {
49
48
Err ( FreeRtosError :: QueueSendTimeout )
50
49
} else {
50
+ core:: mem:: forget ( item) ;
51
51
Ok ( ( ) )
52
52
}
53
53
}
@@ -85,7 +85,7 @@ impl<T: Sized + Copy> Queue<T> {
85
85
}
86
86
}
87
87
88
- impl < T : Sized + Copy > Drop for Queue < T > {
88
+ impl < T : Sized + Unpin > Drop for Queue < T > {
89
89
fn drop ( & mut self ) {
90
90
unsafe {
91
91
freertos_rs_queue_delete ( self . queue ) ;
0 commit comments