Changeset d6ff3ff
- Timestamp:
- Jul 13, 2017, 3:51:00 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 0764cfb, 24fc196, 3d4b23fa
- Parents:
- 35b06a8
- Location:
- src
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
src/benchmark/create_pthrd.c
r35b06a8 rd6ff3ff 17 17 18 18 for (size_t i = 0; i < n; i++) { 19 pthread_ attr_t attr;20 if (pthread_ attr_init(&attr) < 0) {19 pthread_t thread; 20 if (pthread_create(&thread, NULL, foo, NULL) < 0) { 21 21 return 1; 22 22 } 23 if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) < 0) { 24 return 1; 25 } 26 pthread_t thread; 27 if (pthread_create(&thread, &attr, foo, NULL) < 0) { 23 24 if (pthread_join( thread, NULL) < 0) { 28 25 return 1; 29 26 } -
src/libcfa/concurrency/kernel.c
r35b06a8 rd6ff3ff 60 60 volatile thread_local coroutine_desc * this_coroutine; 61 61 volatile thread_local thread_desc * this_thread; 62 volatile thread_local bool preemption_in_progress = 0; 62 63 volatile thread_local unsigned short disable_preempt_count = 1; 63 64 -
src/libcfa/concurrency/kernel_private.h
r35b06a8 rd6ff3ff 79 79 extern volatile thread_local coroutine_desc * this_coroutine; 80 80 extern volatile thread_local thread_desc * this_thread; 81 extern volatile thread_local bool preemption_in_progress; 81 82 extern volatile thread_local unsigned short disable_preempt_count; 82 83 -
src/libcfa/concurrency/preemption.c
r35b06a8 rd6ff3ff 180 180 181 181 static inline bool preemption_ready() { 182 return disable_preempt_count == 0 ;182 return disable_preempt_count == 0 && !preemption_in_progress; 183 183 } 184 184 … … 218 218 219 219 void kernel_stop_preemption() { 220 LIB_DEBUG_PRINT_SAFE("Kernel : Preemption stopping\n"); 221 220 222 sigset_t mask; 221 223 sigfillset( &mask ); … … 248 250 LIB_DEBUG_DO( last_interrupt = (void *)(cxt->uc_mcontext.gregs[CFA_REG_IP]); ) 249 251 if( preemption_ready() ) { 252 preemption_in_progress = true; 250 253 signal_unblock( SIGUSR1 ); 254 this_processor->pending_preemption = false; 255 preemption_in_progress = false; 251 256 BlockInternal( (thread_desc*)this_thread ); 252 257 } … … 255 260 } 256 261 } 257 258 // void sigHandler_alarm( __CFA_SIGPARMS__ ) {259 // LIB_DEBUG_DO( last_interrupt = (void *)(cxt->uc_mcontext.gregs[CFA_REG_IP]); )260 // verify( this_processor == systemProcessor );261 262 // if( try_lock( &systemProcessor->alarm_lock DEBUG_CTX2 ) ) {263 // tick_preemption();264 // systemProcessor->pending_alarm = false;265 // unlock( &systemProcessor->alarm_lock );266 // }267 // else {268 // defer_alarm();269 // }270 271 // signal_unblock( SIGALRM );272 273 // if( preemption_ready() && this_processor->pending_preemption ) {274 275 // this_processor->pending_preemption = false;276 // BlockInternal( (thread_desc*)this_thread );277 // }278 // }279 262 280 263 void * alarm_loop( __attribute__((unused)) void * args ) { -
src/tests/preempt_longrun/Makefile.am
r35b06a8 rd6ff3ff 16 16 17 17 repeats=10 18 max_time= 3018 max_time=600 19 19 preempt=1_000ul 20 20 -
src/tests/preempt_longrun/Makefile.in
r35b06a8 rd6ff3ff 449 449 top_srcdir = @top_srcdir@ 450 450 repeats = 10 451 max_time = 30451 max_time = 600 452 452 preempt = 1_000ul 453 453 REPEAT = ${abs_top_srcdir}/tools/repeat -s -
src/tests/preempt_longrun/create.c
r35b06a8 rd6ff3ff 15 15 16 16 int main(int argc, char* argv[]) { 17 processor p; 17 18 for(int i = 0; i < 10_000ul; i++) { 18 19 worker_t w[7];
Note: See TracChangeset
for help on using the changeset viewer.