@@ -47,8 +47,8 @@ pub type Result<T, E = imp::Error> = core::result::Result<T, E>;
4747
4848impl FiberStack {
4949 /// Creates a new fiber stack of the given size.
50- pub fn new ( size : usize ) -> Result < Self > {
51- Ok ( Self ( imp:: FiberStack :: new ( size) ?) )
50+ pub fn new ( size : usize , zeroed : bool ) -> Result < Self > {
51+ Ok ( Self ( imp:: FiberStack :: new ( size, zeroed ) ?) )
5252 }
5353
5454 /// Creates a new fiber stack of the given size.
@@ -108,7 +108,7 @@ pub unsafe trait RuntimeFiberStackCreator: Send + Sync {
108108 ///
109109 /// This is useful to plugin previously allocated memory instead of mmap'ing a new stack for
110110 /// every instance.
111- fn new_stack ( & self , size : usize ) -> Result < Box < dyn RuntimeFiberStack > , Error > ;
111+ fn new_stack ( & self , size : usize , zeroed : bool ) -> Result < Box < dyn RuntimeFiberStack > , Error > ;
112112}
113113
114114/// A fiber stack backed by custom memory.
@@ -276,11 +276,11 @@ mod tests {
276276
277277 #[ test]
278278 fn small_stacks ( ) {
279- Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 0 ) . unwrap ( ) , |_, _| { } )
279+ Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 0 , false ) . unwrap ( ) , |_, _| { } )
280280 . unwrap ( )
281281 . resume ( ( ) )
282282 . unwrap ( ) ;
283- Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 1 ) . unwrap ( ) , |_, _| { } )
283+ Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 1 , false ) . unwrap ( ) , |_, _| { } )
284284 . unwrap ( )
285285 . resume ( ( ) )
286286 . unwrap ( ) ;
@@ -290,10 +290,11 @@ mod tests {
290290 fn smoke ( ) {
291291 let hit = Rc :: new ( Cell :: new ( false ) ) ;
292292 let hit2 = hit. clone ( ) ;
293- let fiber = Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 1024 * 1024 ) . unwrap ( ) , move |_, _| {
294- hit2. set ( true ) ;
295- } )
296- . unwrap ( ) ;
293+ let fiber =
294+ Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 1024 * 1024 , false ) . unwrap ( ) , move |_, _| {
295+ hit2. set ( true ) ;
296+ } )
297+ . unwrap ( ) ;
297298 assert ! ( !hit. get( ) ) ;
298299 fiber. resume ( ( ) ) . unwrap ( ) ;
299300 assert ! ( hit. get( ) ) ;
@@ -303,12 +304,13 @@ mod tests {
303304 fn suspend_and_resume ( ) {
304305 let hit = Rc :: new ( Cell :: new ( false ) ) ;
305306 let hit2 = hit. clone ( ) ;
306- let fiber = Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 1024 * 1024 ) . unwrap ( ) , move |_, s| {
307- s. suspend ( ( ) ) ;
308- hit2. set ( true ) ;
309- s. suspend ( ( ) ) ;
310- } )
311- . unwrap ( ) ;
307+ let fiber =
308+ Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 1024 * 1024 , false ) . unwrap ( ) , move |_, s| {
309+ s. suspend ( ( ) ) ;
310+ hit2. set ( true ) ;
311+ s. suspend ( ( ) ) ;
312+ } )
313+ . unwrap ( ) ;
312314 assert ! ( !hit. get( ) ) ;
313315 assert ! ( fiber. resume( ( ) ) . is_err( ) ) ;
314316 assert ! ( !hit. get( ) ) ;
@@ -345,15 +347,17 @@ mod tests {
345347 }
346348
347349 fn run_test ( ) {
348- let fiber =
349- Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 1024 * 1024 ) . unwrap ( ) , move |( ) , s| {
350+ let fiber = Fiber :: < ( ) , ( ) , ( ) > :: new (
351+ FiberStack :: new ( 1024 * 1024 , false ) . unwrap ( ) ,
352+ move |( ) , s| {
350353 assert_contains_host ( ) ;
351354 s. suspend ( ( ) ) ;
352355 assert_contains_host ( ) ;
353356 s. suspend ( ( ) ) ;
354357 assert_contains_host ( ) ;
355- } )
356- . unwrap ( ) ;
358+ } ,
359+ )
360+ . unwrap ( ) ;
357361 assert ! ( fiber. resume( ( ) ) . is_err( ) ) ;
358362 assert ! ( fiber. resume( ( ) ) . is_err( ) ) ;
359363 assert ! ( fiber. resume( ( ) ) . is_ok( ) ) ;
@@ -369,12 +373,14 @@ mod tests {
369373
370374 let a = Rc :: new ( Cell :: new ( false ) ) ;
371375 let b = SetOnDrop ( a. clone ( ) ) ;
372- let fiber =
373- Fiber :: < ( ) , ( ) , ( ) > :: new ( FiberStack :: new ( 1024 * 1024 ) . unwrap ( ) , move |( ) , _s| {
376+ let fiber = Fiber :: < ( ) , ( ) , ( ) > :: new (
377+ FiberStack :: new ( 1024 * 1024 , false ) . unwrap ( ) ,
378+ move |( ) , _s| {
374379 let _ = & b;
375380 panic ! ( ) ;
376- } )
377- . unwrap ( ) ;
381+ } ,
382+ )
383+ . unwrap ( ) ;
378384 assert ! ( panic:: catch_unwind( AssertUnwindSafe ( || fiber. resume( ( ) ) ) ) . is_err( ) ) ;
379385 assert ! ( a. get( ) ) ;
380386
@@ -389,11 +395,14 @@ mod tests {
389395
390396 #[ test]
391397 fn suspend_and_resume_values ( ) {
392- let fiber = Fiber :: new ( FiberStack :: new ( 1024 * 1024 ) . unwrap ( ) , move |first, s| {
393- assert_eq ! ( first, 2.0 ) ;
394- assert_eq ! ( s. suspend( 4 ) , 3.0 ) ;
395- "hello" . to_string ( )
396- } )
398+ let fiber = Fiber :: new (
399+ FiberStack :: new ( 1024 * 1024 , false ) . unwrap ( ) ,
400+ move |first, s| {
401+ assert_eq ! ( first, 2.0 ) ;
402+ assert_eq ! ( s. suspend( 4 ) , 3.0 ) ;
403+ "hello" . to_string ( )
404+ } ,
405+ )
397406 . unwrap ( ) ;
398407 assert_eq ! ( fiber. resume( 2.0 ) , Err ( 4 ) ) ;
399408 assert_eq ! ( fiber. resume( 3.0 ) , Ok ( "hello" . to_string( ) ) ) ;
0 commit comments