File tree 3 files changed +30
-3
lines changed
3 files changed +30
-3
lines changed Original file line number Diff line number Diff line change @@ -27,6 +27,10 @@ harness = false
27
27
name = " large_image"
28
28
harness = false
29
29
30
+ [[test ]]
31
+ name = " rayon"
32
+ required-features = [" rayon" ]
33
+
30
34
[features ]
31
35
default = [" rayon" ]
32
36
platform_independent = []
Original file line number Diff line number Diff line change @@ -12,12 +12,12 @@ use super::immediate::ImmediateWorker;
12
12
13
13
pub fn with_multithreading < T > ( f : impl FnOnce ( & mut dyn Worker ) -> T ) -> T {
14
14
#[ cfg( not( feature = "rayon" ) ) ]
15
- let mut worker = StdThreadWorker ( MpscWorker :: default ( ) ) ;
15
+ return self :: enter_threads ( f ) ;
16
16
17
17
#[ cfg( feature = "rayon" ) ]
18
- jpeg_rayon:: enter ( |mut worker| {
18
+ return jpeg_rayon:: enter ( |mut worker| {
19
19
f ( & mut worker)
20
- } )
20
+ } ) ;
21
21
}
22
22
23
23
enum WorkerMsg {
@@ -128,6 +128,13 @@ fn collect_worker_thread(rx: Receiver<Vec<u8>>) -> Vec<u8> {
128
128
rx. recv ( ) . expect ( "jpeg-decoder worker thread error" )
129
129
}
130
130
131
+ #[ allow( dead_code) ]
132
+ fn enter_threads < T > ( f : impl FnOnce ( & mut dyn Worker ) -> T ) -> T {
133
+ let mut worker = StdThreadWorker ( MpscWorker :: default ( ) ) ;
134
+ f ( & mut worker)
135
+ }
136
+
137
+
131
138
#[ cfg( feature = "rayon" ) ]
132
139
mod jpeg_rayon {
133
140
use crate :: error:: Result ;
Original file line number Diff line number Diff line change
1
+ use std:: { fs:: File , path:: Path } ;
2
+ use jpeg_decoder:: Decoder ;
3
+
4
+ #[ test]
5
+ fn decoding_in_limited_threadpool_does_not_deadlock ( ) {
6
+ let path = Path :: new ( "tests" ) . join ( "reftest" ) . join ( "images" ) . join ( "mozilla" ) . join ( "jpg-progressive.jpg" ) ;
7
+
8
+ let pool = rayon:: ThreadPoolBuilder :: new ( )
9
+ . num_threads ( 1 )
10
+ . build ( )
11
+ . unwrap ( ) ;
12
+ pool. install ( || {
13
+ let mut decoder = Decoder :: new ( File :: open ( & path) . unwrap ( ) ) ;
14
+ let _ = decoder. decode ( ) . unwrap ( ) ;
15
+ } ) ;
16
+ }
You can’t perform that action at this time.
0 commit comments