Changeset ab5baab
- Timestamp:
- Jun 2, 2021, 5:22:57 PM (3 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 96bfdde7, e014c6d
- Parents:
- e9ea53d
- Location:
- libcfa/src/concurrency
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/coroutine.cfa
re9ea53d rab5baab 267 267 struct $coroutine * cor = active_coroutine(); 268 268 269 // get the active thread once 270 $thread * athrd = active_thread(); 271 272 /* paranoid */ verify( athrd->corctx_flag ); 273 athrd->corctx_flag = false; 274 269 275 if(cor->state == Primed) { 270 276 __cfactx_suspend(); -
libcfa/src/concurrency/coroutine.hfa
re9ea53d rab5baab 86 86 src->state = src->state == Halted ? Halted : Blocked; 87 87 88 // get the active thread once 89 $thread * athrd = active_thread(); 90 91 // Mark the coroutine 92 /* paranoid */ verify( !athrd->corctx_flag ); 93 athrd->corctx_flag = true; 94 88 95 // set new coroutine that task is executing 89 a ctive_thread()->curr_cor = dst;96 athrd->curr_cor = dst; 90 97 91 98 // context switch to specified coroutine 92 verify( dst->context.SP );99 /* paranoid */ verify( dst->context.SP ); 93 100 __cfactx_switch( &src->context, &dst->context ); 94 101 // when __cfactx_switch returns we are back in the src coroutine 102 103 /* paranoid */ verify( athrd->corctx_flag ); 104 athrd->corctx_flag = false; 95 105 96 106 // set state of new coroutine to active -
libcfa/src/concurrency/invoke.h
re9ea53d rab5baab 167 167 enum __Preemption_Reason preempted:8; 168 168 169 bool corctx_flag; 170 169 171 //SKULLDUGGERY errno is not save in the thread data structure because returnToKernel appears to be the only function to require saving and restoring it 170 172 -
libcfa/src/concurrency/kernel.cfa
re9ea53d rab5baab 424 424 425 425 /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_dst->canary ); 426 /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) , "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst );427 /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ) , "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst );426 /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) || thrd_dst->corctx_flag, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst ); 427 /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ) || thrd_dst->corctx_flag, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst ); 428 428 /* paranoid */ verify( thrd_dst->context.SP ); 429 429 /* paranoid */ verify( thrd_dst->curr_cluster == this->cltr ); -
libcfa/src/concurrency/kernel/startup.cfa
re9ea53d rab5baab 397 397 // make sure the current state is still correct 398 398 /* paranoid */ verify(src->state == Ready); 399 src->corctx_flag = true; 399 400 400 401 // context switch to specified coroutine -
libcfa/src/concurrency/thread.cfa
re9ea53d rab5baab 32 32 state = Start; 33 33 preempted = __NO_PREEMPTION; 34 corctx_flag = false; 34 35 curr_cor = &self_cor; 35 36 self_mon.owner = &this;
Note: See TracChangeset
for help on using the changeset viewer.