- File:
-
- 1 edited
-
libcfa/src/concurrency/preemption.cfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/preemption.cfa
r01ba701 rc18bf9e 357 357 } 358 358 } 359 }360 361 // Check whether or not there is pending preemption362 // force_yield( __POLL_PREEMPTION ) if appropriate363 // return true if the thread was in an interruptable state364 // i.e. on a real processor and not in the kernel365 // (can return true even if no preemption was pending)366 bool poll_interrupts() libcfa_public {367 // Cache the processor now since interrupts can start happening after the atomic store368 processor * proc = publicTLS_get( this_processor );369 if ( ! proc ) return false;370 if ( ! __preemption_enabled() ) return false;371 372 with( __cfaabi_tls.preemption_state ){373 // Signal the compiler that a fence is needed but only for signal handlers374 __atomic_signal_fence(__ATOMIC_RELEASE);375 if( proc->pending_preemption ) {376 proc->pending_preemption = false;377 force_yield( __POLL_PREEMPTION );378 }379 }380 381 return true;382 359 } 383 360 } … … 666 643 // Kernel Signal Handlers 667 644 //============================================================================================= 668 __cfaabi_dbg_debug_do( static _Thread_local void * last_interrupt = 0; )645 __cfaabi_dbg_debug_do( static thread_local void * last_interrupt = 0; ) 669 646 670 647 // Context switch signal handler
Note:
See TracChangeset
for help on using the changeset viewer.