Skip to content

Commit 8e7ef03

Browse files
committed
Move ArcWake in common test file.
1 parent 363e992 commit 8e7ef03

File tree

3 files changed

+73
-110
lines changed

3 files changed

+73
-110
lines changed

src/test/run-pass/async-await.rs

+5-55
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,20 @@
11
// edition:2018
2+
// aux-build:arc_wake.rs
23

34
#![feature(arbitrary_self_types, async_await, await_macro, futures_api)]
45

6+
extern crate arc_wake;
7+
58
use std::pin::Pin;
69
use std::future::Future;
710
use std::sync::{
811
Arc,
912
atomic::{self, AtomicUsize},
1013
};
1114
use std::task::{
12-
Poll, Waker, RawWaker, RawWakerVTable,
15+
Poll, Waker,
1316
};
14-
15-
macro_rules! waker_vtable {
16-
($ty:ident) => {
17-
&RawWakerVTable {
18-
clone: clone_arc_raw::<$ty>,
19-
drop: drop_arc_raw::<$ty>,
20-
wake: wake_arc_raw::<$ty>,
21-
}
22-
};
23-
}
24-
25-
pub trait ArcWake {
26-
fn wake(arc_self: &Arc<Self>);
27-
28-
fn into_waker(wake: Arc<Self>) -> Waker where Self: Sized
29-
{
30-
let ptr = Arc::into_raw(wake) as *const();
31-
32-
unsafe {
33-
Waker::new_unchecked(RawWaker{
34-
data: ptr,
35-
vtable: waker_vtable!(Self),
36-
})
37-
}
38-
}
39-
}
40-
41-
unsafe fn increase_refcount<T: ArcWake>(data: *const()) {
42-
// Retain Arc by creating a copy
43-
let arc: Arc<T> = Arc::from_raw(data as *const T);
44-
let arc_clone = arc.clone();
45-
// Forget the Arcs again, so that the refcount isn't decrased
46-
let _ = Arc::into_raw(arc);
47-
let _ = Arc::into_raw(arc_clone);
48-
}
49-
50-
unsafe fn clone_arc_raw<T: ArcWake>(data: *const()) -> RawWaker {
51-
increase_refcount::<T>(data);
52-
RawWaker {
53-
data: data,
54-
vtable: waker_vtable!(T),
55-
}
56-
}
57-
58-
unsafe fn drop_arc_raw<T: ArcWake>(data: *const()) {
59-
// Drop Arc
60-
let _: Arc<T> = Arc::from_raw(data as *const T);
61-
}
62-
63-
unsafe fn wake_arc_raw<T: ArcWake>(data: *const()) {
64-
let arc: Arc<T> = Arc::from_raw(data as *const T);
65-
ArcWake::wake(&arc);
66-
let _ = Arc::into_raw(arc);
67-
}
17+
use arc_wake::ArcWake;
6818

6919
struct Counter {
7020
wakes: AtomicUsize,
+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// edition:2018
2+
3+
#![feature(arbitrary_self_types, futures_api)]
4+
5+
use std::sync::Arc;
6+
use std::task::{
7+
Poll, Waker, RawWaker, RawWakerVTable,
8+
};
9+
10+
macro_rules! waker_vtable {
11+
($ty:ident) => {
12+
&RawWakerVTable {
13+
clone: clone_arc_raw::<$ty>,
14+
drop: drop_arc_raw::<$ty>,
15+
wake: wake_arc_raw::<$ty>,
16+
}
17+
};
18+
}
19+
20+
pub trait ArcWake {
21+
fn wake(arc_self: &Arc<Self>);
22+
23+
fn into_waker(wake: Arc<Self>) -> Waker where Self: Sized
24+
{
25+
let ptr = Arc::into_raw(wake) as *const();
26+
27+
unsafe {
28+
Waker::new_unchecked(RawWaker{
29+
data: ptr,
30+
vtable: waker_vtable!(Self),
31+
})
32+
}
33+
}
34+
}
35+
36+
unsafe fn increase_refcount<T: ArcWake>(data: *const()) {
37+
// Retain Arc by creating a copy
38+
let arc: Arc<T> = Arc::from_raw(data as *const T);
39+
let arc_clone = arc.clone();
40+
// Forget the Arcs again, so that the refcount isn't decrased
41+
let _ = Arc::into_raw(arc);
42+
let _ = Arc::into_raw(arc_clone);
43+
}
44+
45+
unsafe fn clone_arc_raw<T: ArcWake>(data: *const()) -> RawWaker {
46+
increase_refcount::<T>(data);
47+
RawWaker {
48+
data: data,
49+
vtable: waker_vtable!(T),
50+
}
51+
}
52+
53+
unsafe fn drop_arc_raw<T: ArcWake>(data: *const()) {
54+
// Drop Arc
55+
let _: Arc<T> = Arc::from_raw(data as *const T);
56+
}
57+
58+
unsafe fn wake_arc_raw<T: ArcWake>(data: *const()) {
59+
let arc: Arc<T> = Arc::from_raw(data as *const T);
60+
ArcWake::wake(&arc);
61+
let _ = Arc::into_raw(arc);
62+
}

src/test/run-pass/futures-api.rs

+6-55
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,20 @@
1+
// aux-build:arc_wake.rs
2+
13
#![feature(arbitrary_self_types, futures_api)]
24
#![allow(unused)]
35

6+
extern crate arc_wake;
7+
48
use std::future::Future;
59
use std::pin::Pin;
610
use std::sync::{
711
Arc,
812
atomic::{self, AtomicUsize},
913
};
1014
use std::task::{
11-
Poll, Waker, RawWaker, RawWakerVTable,
15+
Poll, Waker,
1216
};
13-
14-
macro_rules! waker_vtable {
15-
($ty:ident) => {
16-
&RawWakerVTable {
17-
clone: clone_arc_raw::<$ty>,
18-
drop: drop_arc_raw::<$ty>,
19-
wake: wake_arc_raw::<$ty>,
20-
}
21-
};
22-
}
23-
24-
pub trait ArcWake {
25-
fn wake(arc_self: &Arc<Self>);
26-
27-
fn into_waker(wake: Arc<Self>) -> Waker where Self: Sized
28-
{
29-
let ptr = Arc::into_raw(wake) as *const();
30-
31-
unsafe {
32-
Waker::new_unchecked(RawWaker{
33-
data: ptr,
34-
vtable: waker_vtable!(Self),
35-
})
36-
}
37-
}
38-
}
39-
40-
unsafe fn increase_refcount<T: ArcWake>(data: *const()) {
41-
// Retain Arc by creating a copy
42-
let arc: Arc<T> = Arc::from_raw(data as *const T);
43-
let arc_clone = arc.clone();
44-
// Forget the Arcs again, so that the refcount isn't decrased
45-
let _ = Arc::into_raw(arc);
46-
let _ = Arc::into_raw(arc_clone);
47-
}
48-
49-
unsafe fn clone_arc_raw<T: ArcWake>(data: *const()) -> RawWaker {
50-
increase_refcount::<T>(data);
51-
RawWaker {
52-
data: data,
53-
vtable: waker_vtable!(T),
54-
}
55-
}
56-
57-
unsafe fn drop_arc_raw<T: ArcWake>(data: *const()) {
58-
// Drop Arc
59-
let _: Arc<T> = Arc::from_raw(data as *const T);
60-
}
61-
62-
unsafe fn wake_arc_raw<T: ArcWake>(data: *const()) {
63-
let arc: Arc<T> = Arc::from_raw(data as *const T);
64-
ArcWake::wake(&arc);
65-
let _ = Arc::into_raw(arc);
66-
}
17+
use arc_wake::ArcWake;
6718

6819
struct Counter {
6920
wakes: AtomicUsize,

0 commit comments

Comments
 (0)