Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/preemption.cfa

    r01ba701 rc18bf9e  
    357357                        }
    358358                }
    359         }
    360 
    361         // Check whether or not there is pending preemption
    362         // force_yield( __POLL_PREEMPTION ) if appropriate
    363         // return true if the thread was in an interruptable state
    364         // i.e. on a real processor and not in the kernel
    365         // (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 store
    368                 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 handlers
    374                         __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;
    382359        }
    383360}
     
    666643// Kernel Signal Handlers
    667644//=============================================================================================
    668 __cfaabi_dbg_debug_do( static _Thread_local void * last_interrupt = 0; )
     645__cfaabi_dbg_debug_do( static thread_local void * last_interrupt = 0; )
    669646
    670647// Context switch signal handler
Note: See TracChangeset for help on using the changeset viewer.