Changes in / [47b5b63:d22e90f]
- Location:
- src/libcfa/concurrency
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/concurrency/coroutine.c
r47b5b63 rd22e90f 65 65 this.errno_ = 0; 66 66 this.state = Start; 67 this.starter = this_coroutine;67 this.starter = NULL; 68 68 this.last = NULL; 69 69 } … … 171 171 suspend(); 172 172 } 173 174 void __leave_coroutine(void) {175 coroutine_desc * src = this_coroutine; // optimization176 177 assertf( src->starter != 0,178 "Attempt to suspend coroutine \"%.256s\" (%p) that does not have a starter.\n"179 "Possible cause is a resume of a coroutine already destroyed or not yet constructed",180 src->name, src );181 assertf( src->starter->state != Halted,182 "Attempt by coroutine \"%.256s\" (%p) to suspend back to terminated coroutine \"%.256s\" (%p).\n"183 "Possible cause is terminated coroutine's main routine has already returned.",184 src->name, src, src->starter->name, src->starter );185 186 CoroutineCtxSwitch( src, src->starter );187 }188 173 } 189 174 -
src/libcfa/concurrency/invoke.c
r47b5b63 rd22e90f 28 28 29 29 extern void __suspend_internal(void); 30 extern void __leave_coroutine(void);31 30 extern void __leave_thread_monitor( struct thread_desc * this ); 32 31 extern void disable_interrupts(); … … 53 52 54 53 //Final suspend, should never return 55 __ leave_coroutine();54 __suspend_internal(); 56 55 abortf("Resumed dead coroutine"); 57 56 } -
src/libcfa/concurrency/invoke.h
r47b5b63 rd22e90f 80 80 int errno_; // copy of global UNIX variable errno 81 81 enum coroutine_state state; // current execution status for coroutine 82 struct coroutine_desc * starter;// first coroutine to resume this one83 struct coroutine_desc * last;// last coroutine to resume this one82 struct coroutine_desc *starter; // first coroutine to resume this one 83 struct coroutine_desc *last; // last coroutine to resume this one 84 84 }; 85 85 -
src/libcfa/concurrency/kernel.c
r47b5b63 rd22e90f 102 102 this.errno_ = 0; 103 103 this.state = Start; 104 this.starter = NULL;105 104 } 106 105 … … 111 110 //----------------------------------------------------------------------------- 112 111 // Processor coroutine 113 114 // Construct the processor context of the main processor115 112 void ?{}(processorCtx_t & this, processor * proc) { 116 113 (this.__cor){ "Processor" }; 117 this.__cor.starter = &mainThread->cor;118 114 this.proc = proc; 119 115 proc->runner = &this; 120 116 } 121 117 122 // Construct the processor context of non-main processors123 118 void ?{}(processorCtx_t & this, processor * proc, current_stack_info_t * info) { 124 119 (this.__cor){ info };
Note:
See TracChangeset
for help on using the changeset viewer.