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 :: panic ;
3+ use std:: sync:: { Arc , Mutex } ;
44
5- struct CountingWaker {
6- nr_wake : Mutex < i32 > ,
7- }
5+ struct CountingWaker {
6+ nr_wake : Mutex < i32 > ,
7+ }
88
9- impl CountingWaker {
10- fn new ( ) -> Self {
11- Self {
12- nr_wake : Mutex :: new ( 0 ) ,
13- }
9+ impl CountingWaker {
10+ fn new ( ) -> Self {
11+ Self {
12+ nr_wake : Mutex :: new ( 0 ) ,
1413 }
14+ }
1515
16- fn wakes ( & self ) -> i32 {
17- * self . nr_wake . lock ( ) . unwrap ( )
18- }
16+ fn wakes ( & self ) -> i32 {
17+ * self . nr_wake . lock ( ) . unwrap ( )
1918 }
19+ }
2020
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- }
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 ;
2625 }
26+ }
2727
28- #[ test]
29- fn create_from_arc ( ) {
30- let some_w = Arc :: new ( CountingWaker :: new ( ) ) ;
28+ #[ test]
29+ fn create_from_arc ( ) {
30+ let some_w = Arc :: new ( CountingWaker :: new ( ) ) ;
3131
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( ) ) ;
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( ) ) ;
3636
37- let w2 = w1. clone ( ) ;
38- assert_eq ! ( 3 , Arc :: strong_count( & some_w) ) ;
37+ let w2 = w1. clone ( ) ;
38+ assert_eq ! ( 3 , Arc :: strong_count( & some_w) ) ;
3939
40- w2. wake_by_ref ( ) ;
41- assert_eq ! ( 2 , some_w. wakes( ) ) ;
40+ w2. wake_by_ref ( ) ;
41+ assert_eq ! ( 2 , some_w. wakes( ) ) ;
4242
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- }
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+ }
4848
49- #[ test]
50- fn ref_wake_same ( ) {
51- let some_w = Arc :: new ( CountingWaker :: new ( ) ) ;
49+ #[ test]
50+ fn ref_wake_same ( ) {
51+ let some_w = Arc :: new ( CountingWaker :: new ( ) ) ;
5252
53- let w1: Waker = task:: waker ( some_w. clone ( ) ) ;
54- let w2 = task:: waker_ref ( & some_w) ;
55- let w3 = w2. clone ( ) ;
53+ let w1: Waker = task:: waker ( some_w. clone ( ) ) ;
54+ let w2 = task:: waker_ref ( & some_w) ;
55+ let w3 = w2. clone ( ) ;
5656
57- assert ! ( w1. will_wake( & w2) ) ;
58- assert ! ( w2. will_wake( & w3) ) ;
59- }
57+ assert ! ( w1. will_wake( & w2) ) ;
58+ assert ! ( w2. will_wake( & w3) ) ;
6059}
6160
6261#[ test]
6362fn proper_refcount_on_wake_panic ( ) {
64- use futures:: task:: { self , ArcWake , Waker } ;
65- use std:: sync:: Arc ;
66-
6763 struct PanicWaker ;
6864
6965 impl ArcWake for PanicWaker {
@@ -75,7 +71,13 @@ fn proper_refcount_on_wake_panic() {
7571 let some_w = Arc :: new ( PanicWaker ) ;
7672
7773 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( ) ) ;
74+ assert_eq ! (
75+ "WAKE UP" ,
76+ * panic:: catch_unwind( || w1. wake_by_ref( ) )
77+ . unwrap_err( )
78+ . downcast:: <& str >( )
79+ . unwrap( )
80+ ) ;
7981 assert_eq ! ( 2 , Arc :: strong_count( & some_w) ) ; // some_w + w1
8082 drop ( w1) ;
8183 assert_eq ! ( 1 , Arc :: strong_count( & some_w) ) ; // some_w
0 commit comments