1- mod countingwaker {
2- use futures:: task:: { self , ArcWake , Waker } ;
3- use std:: sync:: { Arc , Mutex } ;
1+ use futures:: task:: { self , ArcWake , Waker } ;
2+ use std:: sync:: { Arc , Mutex } ;
43
5- struct CountingWaker {
6- nr_wake : Mutex < i32 > ,
7- }
4+ struct CountingWaker {
5+ nr_wake : Mutex < i32 > ,
6+ }
87
9- impl CountingWaker {
10- fn new ( ) -> Self {
11- Self {
12- nr_wake : Mutex :: new ( 0 ) ,
13- }
8+ impl CountingWaker {
9+ fn new ( ) -> Self {
10+ Self {
11+ nr_wake : Mutex :: new ( 0 ) ,
1412 }
13+ }
1514
16- fn wakes ( & self ) -> i32 {
17- * self . nr_wake . lock ( ) . unwrap ( )
18- }
15+ fn wakes ( & self ) -> i32 {
16+ * self . nr_wake . lock ( ) . unwrap ( )
1917 }
18+ }
2019
21- impl ArcWake for CountingWaker {
22- fn wake_by_ref ( arc_self : & Arc < Self > ) {
23- let mut lock = arc_self. nr_wake . lock ( ) . unwrap ( ) ;
24- * lock += 1 ;
25- }
20+ impl ArcWake for CountingWaker {
21+ fn wake_by_ref ( arc_self : & Arc < Self > ) {
22+ let mut lock = arc_self. nr_wake . lock ( ) . unwrap ( ) ;
23+ * lock += 1 ;
2624 }
25+ }
2726
28- #[ test]
29- fn create_from_arc ( ) {
30- let some_w = Arc :: new ( CountingWaker :: new ( ) ) ;
27+ #[ test]
28+ fn create_from_arc ( ) {
29+ let some_w = Arc :: new ( CountingWaker :: new ( ) ) ;
3130
32- let w1: Waker = task:: waker ( some_w. clone ( ) ) ;
33- assert_eq ! ( 2 , Arc :: strong_count( & some_w) ) ;
34- w1. wake_by_ref ( ) ;
35- assert_eq ! ( 1 , some_w. wakes( ) ) ;
31+ let w1: Waker = task:: waker ( some_w. clone ( ) ) ;
32+ assert_eq ! ( 2 , Arc :: strong_count( & some_w) ) ;
33+ w1. wake_by_ref ( ) ;
34+ assert_eq ! ( 1 , some_w. wakes( ) ) ;
3635
37- let w2 = w1. clone ( ) ;
38- assert_eq ! ( 3 , Arc :: strong_count( & some_w) ) ;
36+ let w2 = w1. clone ( ) ;
37+ assert_eq ! ( 3 , Arc :: strong_count( & some_w) ) ;
3938
40- w2. wake_by_ref ( ) ;
41- assert_eq ! ( 2 , some_w. wakes( ) ) ;
39+ w2. wake_by_ref ( ) ;
40+ assert_eq ! ( 2 , some_w. wakes( ) ) ;
4241
43- drop ( w2) ;
44- assert_eq ! ( 2 , Arc :: strong_count( & some_w) ) ;
45- drop ( w1) ;
46- assert_eq ! ( 1 , Arc :: strong_count( & some_w) ) ;
47- }
42+ drop ( w2) ;
43+ assert_eq ! ( 2 , Arc :: strong_count( & some_w) ) ;
44+ drop ( w1) ;
45+ assert_eq ! ( 1 , Arc :: strong_count( & some_w) ) ;
46+ }
4847
49- #[ test]
50- fn ref_wake_same ( ) {
51- let some_w = Arc :: new ( CountingWaker :: new ( ) ) ;
48+ #[ test]
49+ fn ref_wake_same ( ) {
50+ let some_w = Arc :: new ( CountingWaker :: new ( ) ) ;
5251
53- let w1: Waker = task:: waker ( some_w. clone ( ) ) ;
54- let w2 = task:: waker_ref ( & some_w) ;
55- let w3 = w2. clone ( ) ;
52+ let w1: Waker = task:: waker ( some_w. clone ( ) ) ;
53+ let w2 = task:: waker_ref ( & some_w) ;
54+ let w3 = w2. clone ( ) ;
5655
57- assert ! ( w1. will_wake( & w2) ) ;
58- assert ! ( w2. will_wake( & w3) ) ;
59- }
56+ assert ! ( w1. will_wake( & w2) ) ;
57+ assert ! ( w2. will_wake( & w3) ) ;
6058}
6159
6260#[ test]
6361fn proper_refcount_on_wake_panic ( ) {
64- use futures:: task:: { self , ArcWake , Waker } ;
65- use std:: sync:: Arc ;
66-
6762 struct PanicWaker ;
6863
6964 impl ArcWake for PanicWaker {
@@ -75,7 +70,13 @@ fn proper_refcount_on_wake_panic() {
7570 let some_w = Arc :: new ( PanicWaker ) ;
7671
7772 let w1: Waker = task:: waker ( some_w. clone ( ) ) ;
78- assert_eq ! ( "WAKE UP" , * std:: panic:: catch_unwind( || w1. wake_by_ref( ) ) . unwrap_err( ) . downcast:: <& str >( ) . unwrap( ) ) ;
73+ assert_eq ! (
74+ "WAKE UP" ,
75+ * std:: panic:: catch_unwind( || w1. wake_by_ref( ) )
76+ . unwrap_err( )
77+ . downcast:: <& str >( )
78+ . unwrap( )
79+ ) ;
7980 assert_eq ! ( 2 , Arc :: strong_count( & some_w) ) ; // some_w + w1
8081 drop ( w1) ;
8182 assert_eq ! ( 1 , Arc :: strong_count( & some_w) ) ; // some_w
0 commit comments