@@ -2,10 +2,9 @@ use crate::catch;
22use crate :: common:: constants:: CoroutineState ;
33use crate :: coroutine:: listener:: Listener ;
44use crate :: coroutine:: local:: CoroutineLocal ;
5- use crate :: coroutine:: stack_pool:: { MemoryPool , PooledStack } ;
65use crate :: coroutine:: suspender:: Suspender ;
76use crate :: coroutine:: StackInfo ;
8- use corosensei:: stack:: Stack ;
7+ use corosensei:: stack:: { DefaultStack , Stack } ;
98use corosensei:: trap:: TrapHandlerRegs ;
109use corosensei:: CoroutineResult ;
1110use std:: cell:: { Cell , RefCell , UnsafeCell } ;
@@ -27,7 +26,7 @@ cfg_if::cfg_if! {
2726#[ repr( C ) ]
2827pub struct Coroutine < ' c , Param , Yield , Return > {
2928 pub ( crate ) name : String ,
30- inner : corosensei:: Coroutine < Param , Yield , Result < Return , & ' static str > , PooledStack > ,
29+ inner : corosensei:: Coroutine < Param , Yield , Result < Return , & ' static str > , DefaultStack > ,
3130 pub ( crate ) state : Cell < CoroutineState < Yield , Return > > ,
3231 stack_infos : UnsafeCell < VecDeque < StackInfo > > ,
3332 pub ( crate ) listeners : VecDeque < & ' c dyn Listener < Yield , Return > > ,
@@ -326,17 +325,13 @@ impl<'c, Param, Yield, Return> Coroutine<'c, Param, Yield, Return> {
326325 stack_size : usize ,
327326 callback : F ,
328327 ) -> std:: io:: Result < R > {
329- let stack_pool = MemoryPool :: get_instance ( ) ;
330328 if let Some ( co) = Self :: current ( ) {
331329 let remaining_stack = unsafe { co. remaining_stack ( ) } ;
332330 if remaining_stack >= red_zone {
333331 return Ok ( callback ( ) ) ;
334332 }
335- return stack_pool. allocate ( stack_size) . map ( |stack| {
336- co. stack_infos_mut ( ) . push_back ( StackInfo {
337- stack_top : stack. base ( ) . get ( ) ,
338- stack_bottom : stack. limit ( ) . get ( ) ,
339- } ) ;
333+ return DefaultStack :: new ( stack_size) . map ( |stack| {
334+ co. stack_infos_mut ( ) . push_back ( StackInfo :: from ( & stack) ) ;
340335 let r = corosensei:: on_stack ( stack, callback) ;
341336 _ = co. stack_infos_mut ( ) . pop_back ( ) ;
342337 r
@@ -355,12 +350,9 @@ impl<'c, Param, Yield, Return> Coroutine<'c, Param, Yield, Return> {
355350 return Ok ( callback ( ) ) ;
356351 }
357352 }
358- stack_pool . allocate ( stack_size) . map ( |stack| {
353+ DefaultStack :: new ( stack_size) . map ( |stack| {
359354 STACK_INFOS . with ( |s| {
360- s. borrow_mut ( ) . push_back ( StackInfo {
361- stack_top : stack. base ( ) . get ( ) ,
362- stack_bottom : stack. limit ( ) . get ( ) ,
363- } ) ;
355+ s. borrow_mut ( ) . push_back ( StackInfo :: from ( & stack) ) ;
364356 } ) ;
365357 let r = corosensei:: on_stack ( stack, callback) ;
366358 _ = STACK_INFOS . with ( |s| s. borrow_mut ( ) . pop_back ( ) ) ;
@@ -398,7 +390,7 @@ where
398390 F : FnOnce ( & Suspender < Param , Yield > , Param ) -> Return + ' static ,
399391 {
400392 let stack_size = stack_size. max ( crate :: common:: page_size ( ) ) ;
401- let stack = MemoryPool :: get_instance ( ) . allocate ( stack_size) ?;
393+ let stack = DefaultStack :: new ( stack_size) ?;
402394 let stack_infos = UnsafeCell :: new ( VecDeque :: from ( [ StackInfo {
403395 stack_top : stack. base ( ) . get ( ) ,
404396 stack_bottom : stack. limit ( ) . get ( ) ,
@@ -469,3 +461,12 @@ where
469461 }
470462 }
471463}
464+
465+ impl < S : Stack > From < & S > for StackInfo {
466+ fn from ( stack : & S ) -> Self {
467+ Self {
468+ stack_top : stack. base ( ) . get ( ) ,
469+ stack_bottom : stack. limit ( ) . get ( ) ,
470+ }
471+ }
472+ }
0 commit comments