1
- use super :: arc_wake :: ArcWake ;
1
+ use super :: Wake ;
2
2
use alloc:: sync:: Arc ;
3
3
use core:: mem;
4
4
use core:: task:: { RawWaker , RawWakerVTable , Waker } ;
5
5
6
- pub ( super ) fn waker_vtable < W : ArcWake > ( ) -> & ' static RawWakerVTable {
6
+ pub ( super ) fn waker_vtable < W : Wake > ( ) -> & ' static RawWakerVTable {
7
7
& RawWakerVTable :: new (
8
8
clone_arc_raw :: < W > ,
9
9
wake_arc_raw :: < W > ,
@@ -12,48 +12,46 @@ pub(super) fn waker_vtable<W: ArcWake>() -> &'static RawWakerVTable {
12
12
)
13
13
}
14
14
15
- /// Creates a [`Waker`] from an `Arc<impl ArcWake >`.
15
+ /// Creates a [`Waker`] from an `Arc<impl Wake >`.
16
16
///
17
17
/// The returned [`Waker`] will call
18
- /// [`ArcWake .wake()`](ArcWake ::wake) if awoken.
18
+ /// [`Wake .wake()`](Wake ::wake) if awoken.
19
19
pub fn waker < W > ( wake : Arc < W > ) -> Waker
20
20
where
21
- W : ArcWake + ' static ,
21
+ W : Wake + Send + Sync + ' static ,
22
22
{
23
- let ptr = Arc :: into_raw ( wake) as * const ( ) ;
24
-
25
- unsafe { Waker :: from_raw ( RawWaker :: new ( ptr, waker_vtable :: < W > ( ) ) ) }
23
+ wake. into ( )
26
24
}
27
25
28
26
// FIXME: panics on Arc::clone / refcount changes could wreak havoc on the
29
27
// code here. We should guard against this by aborting.
30
28
31
29
#[ allow( clippy:: redundant_clone) ] // The clone here isn't actually redundant.
32
- unsafe fn increase_refcount < T : ArcWake > ( data : * const ( ) ) {
30
+ unsafe fn increase_refcount < T : Wake > ( data : * const ( ) ) {
33
31
// Retain Arc, but don't touch refcount by wrapping in ManuallyDrop
34
32
let arc = mem:: ManuallyDrop :: new ( Arc :: < T > :: from_raw ( data as * const T ) ) ;
35
33
// Now increase refcount, but don't drop new refcount either
36
34
let _arc_clone: mem:: ManuallyDrop < _ > = arc. clone ( ) ;
37
35
}
38
36
39
37
// used by `waker_ref`
40
- unsafe fn clone_arc_raw < T : ArcWake > ( data : * const ( ) ) -> RawWaker {
38
+ unsafe fn clone_arc_raw < T : Wake > ( data : * const ( ) ) -> RawWaker {
41
39
increase_refcount :: < T > ( data) ;
42
40
RawWaker :: new ( data, waker_vtable :: < T > ( ) )
43
41
}
44
42
45
- unsafe fn wake_arc_raw < T : ArcWake > ( data : * const ( ) ) {
43
+ unsafe fn wake_arc_raw < T : Wake > ( data : * const ( ) ) {
46
44
let arc: Arc < T > = Arc :: from_raw ( data as * const T ) ;
47
- ArcWake :: wake ( arc) ;
45
+ Wake :: wake ( arc) ;
48
46
}
49
47
50
48
// used by `waker_ref`
51
- unsafe fn wake_by_ref_arc_raw < T : ArcWake > ( data : * const ( ) ) {
49
+ unsafe fn wake_by_ref_arc_raw < T : Wake > ( data : * const ( ) ) {
52
50
// Retain Arc, but don't touch refcount by wrapping in ManuallyDrop
53
51
let arc = mem:: ManuallyDrop :: new ( Arc :: < T > :: from_raw ( data as * const T ) ) ;
54
- ArcWake :: wake_by_ref ( & arc) ;
52
+ Wake :: wake_by_ref ( & arc) ;
55
53
}
56
54
57
- unsafe fn drop_arc_raw < T : ArcWake > ( data : * const ( ) ) {
55
+ unsafe fn drop_arc_raw < T : Wake > ( data : * const ( ) ) {
58
56
drop ( Arc :: < T > :: from_raw ( data as * const T ) )
59
57
}
0 commit comments