Changeset c3e510b
- Timestamp:
- Aug 7, 2023, 12:35:53 PM (16 months ago)
- Branches:
- master
- Children:
- 27f2bef
- Parents:
- ff7f6d07
- Files:
-
- 2 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/coroutine.cfa
rff7f6d07 rc3e510b 325 325 // poll iff nonlocal ehm is enabled 326 326 bool checked_poll( T & cor ) libcfa_public { return get_coroutine( cor )->ehm_state.ehm_enabled ? poll( cor ) : false; } 327 328 coroutine$ * resumer( T & cor ) libcfa_public { return get_coroutine( cor )->last; } 327 329 } 328 330 … … 338 340 } 339 341 342 forall(exceptT & | { void $throwResume(exceptT &); }) 343 void resumeAt( coroutine$ * receiver, exceptT & ex ) libcfa_public { 344 nonlocal_exception * nl_ex = alloc(); 345 (*nl_ex){ (exception_t *)&ex }; 346 lock( receiver->ehm_state.buffer_lock __cfaabi_dbg_ctx2 ); 347 append( receiver->ehm_state.ehm_buffer, nl_ex ); 348 unlock( receiver->ehm_state.buffer_lock ); 349 } 350 340 351 // Local Variables: // 341 352 // mode: c // -
libcfa/src/concurrency/coroutine.hfa
rff7f6d07 rc3e510b 218 218 } 219 219 220 // non local ehm routines220 // non local ehm and coroutine utility routines 221 221 forall(T & | is_coroutine(T)) { 222 222 void enable_ehm( T & cor ); … … 224 224 bool poll( T & cor ); 225 225 bool checked_poll( T & cor ); 226 coroutine$ * resumer( T & cor ); 226 227 } 227 228 … … 230 231 trait ehm_resume_at { void $throwResume(exceptT &); }; 231 232 233 // general resumeAt 232 234 forall(exceptT &, T & | ehm_resume_at( exceptT, T )) 233 235 void resumeAt( T & receiver, exceptT & ex ); 236 237 // resumeAt for underlying coroutine$ type 238 forall(exceptT & | { void $throwResume(exceptT &); }) 239 void resumeAt( coroutine$ * receiver, exceptT & ex ); 234 240 235 241 // Local Variables: // -
tests/exceptions/pingpong_nonlocal.cfa
rff7f6d07 rc3e510b 1 1 #include <fstream.hfa> 2 2 #include <thread.hfa> 3 #include <fstream.hfa>4 3 #include <mutex_stmt.hfa> 5 4
Note: See TracChangeset
for help on using the changeset viewer.