Changes in / [8a9a3ab:4c0fa03]
- Location:
- libcfa/src/concurrency
- Files:
-
- 3 edited
-
coroutine.cfa (modified) (2 diffs)
-
coroutine.hfa (modified) (5 diffs)
-
exception.cfa (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/coroutine.cfa
r8a9a3ab r4c0fa03 344 344 bool poll() libcfa_public { return poll( active_coroutine() ); } 345 345 coroutine$ * resumer() libcfa_public { return active_coroutine()->last; } 346 coroutine$ * first_resumer() libcfa_public { return active_coroutine()->starter; }347 346 348 347 // user facing ehm operations … … 359 358 360 359 coroutine$ * resumer( T & cor ) libcfa_public { return get_coroutine( cor )->last; } 361 coroutine$ * first_resumer( T & cor ) libcfa_public { return get_coroutine( cor )->starter; }362 360 } 363 361 -
libcfa/src/concurrency/coroutine.hfa
r8a9a3ab r4c0fa03 124 124 src->state = Active; 125 125 126 if( unlikely(src->cancellation != 0p && src->cancellation != 1p) ) {126 if( unlikely(src->cancellation != 0p) ) { 127 127 __cfactx_coroutine_unwind(src->cancellation, src); 128 128 } … … 169 169 coroutine$ * dst = get_coroutine(cor); 170 170 171 // printf("FROM RES src: %p, dest: %p\n", src, dst);172 173 171 if( unlikely(dst->context.SP == 0p) ) { 174 172 __stack_prepare(&dst->stack, DEFAULT_STACK_SIZE); … … 190 188 // always done for performance testing 191 189 $ctx_switch( src, dst ); 192 193 if ( unlikely(src->cancellation == 1p) ) { 194 src->cancellation = 0p; 195 // we know dst hasn't been deallocated 190 if ( unlikely(dst->cancellation) ) { 196 191 __cfaehm_cancelled_coroutine( cor, dst, _default_vtable ); 197 192 } … … 227 222 bool poll(); 228 223 coroutine$ * resumer(); 229 coroutine$ * first_resumer();230 224 231 225 forall(T & | is_coroutine(T)) { … … 235 229 bool checked_poll( T & cor ); 236 230 coroutine$ * resumer( T & cor ); 237 coroutine$ * first_resumer( T & cor );238 231 } 239 232 -
libcfa/src/concurrency/exception.cfa
r8a9a3ab r4c0fa03 57 57 struct coroutine$ * src = (coroutine$ *)stop_param; 58 58 struct coroutine$ * dst = src->last; 59 dst->cancellation = 1p; 59 60 60 $ctx_switch( src, dst ); 61 61 abort();
Note:
See TracChangeset
for help on using the changeset viewer.