Changes in / [cc56283:04a8a54]


Ignore:
Files:
5 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/Makefile.am

    rcc56283 r04a8a54  
    121121        concurrency/monitor.hfa \
    122122        concurrency/mutex.hfa \
    123         concurrency/select.hfa \
    124123        concurrency/thread.hfa
    125124
  • libcfa/src/concurrency/kernel.cfa

    rcc56283 r04a8a54  
    142142extern void __disable_interrupts_hard();
    143143extern void __enable_interrupts_hard();
     144
     145static inline void __disable_interrupts_checked() {
     146        /* paranoid */ verify( __preemption_enabled() );
     147        disable_interrupts();
     148        /* paranoid */ verify( ! __preemption_enabled() );
     149}
     150
     151static inline void __enable_interrupts_checked( bool poll = true ) {
     152        /* paranoid */ verify( ! __preemption_enabled() );
     153        enable_interrupts( poll );
     154        /* paranoid */ verify( __preemption_enabled() );
     155}
    144156
    145157
     
    764776// Unconditionnaly wake a thread
    765777void __wake_proc(processor * this) {
    766         /* paranoid */ verify( ! __preemption_enabled() );
    767 
    768778        __cfadbg_print_safe(runtime_core, "Kernel : waking Processor %p\n", this);
    769779
    770         eventfd_t val;
    771         val = 1;
    772         eventfd_write( this->idle_fd, val );
    773 
    774         /* paranoid */ verify( ! __preemption_enabled() );
     780        __disable_interrupts_checked();
     781                /* paranoid */ verify( ! __preemption_enabled() );
     782                eventfd_t val;
     783                val = 1;
     784                eventfd_write( this->idle_fd, val );
     785        __enable_interrupts_checked();
    775786}
    776787
  • libcfa/src/concurrency/kernel/startup.cfa

    rcc56283 r04a8a54  
    279279        // When its coroutine terminates, it return control to the mainThread
    280280        // which is currently here
    281         /* paranoid */ verify( !__atomic_load_n(&mainProcessor->do_terminate, __ATOMIC_ACQUIRE) );
    282281        __atomic_store_n(&mainProcessor->do_terminate, true, __ATOMIC_RELEASE);
    283         __wake_proc( mainProcessor );
    284282        __kernel_last_resume( __cfaabi_tls.this_processor );
    285283        mainThread->self_cor.state = Halted;
     
    566564extern size_t __page_size;
    567565void ^?{}(processor & this) with( this ){
    568         /* paranoid */ verify( !__atomic_load_n(&do_terminate, __ATOMIC_ACQUIRE) );
    569         __cfadbg_print_safe(runtime_core, "Kernel : core %p signaling termination\n", &this);
    570 
    571         __atomic_store_n(&do_terminate, true, __ATOMIC_RELAXED);
    572         __disable_interrupts_checked();
     566        if( ! __atomic_load_n(&do_terminate, __ATOMIC_ACQUIRE) ) {
     567                __cfadbg_print_safe(runtime_core, "Kernel : core %p signaling termination\n", &this);
     568
     569                __atomic_store_n(&do_terminate, true, __ATOMIC_RELAXED);
    573570                __wake_proc( &this );
    574         __enable_interrupts_checked();
    575 
    576         wait( terminated );
    577         /* paranoid */ verify( active_processor() != &this);
     571
     572                wait( terminated );
     573                /* paranoid */ verify( active_processor() != &this);
     574        }
    578575
    579576        __destroy_pthread( kernel_thread, this.stack, 0p );
  • libcfa/src/concurrency/kernel_private.hfa

    rcc56283 r04a8a54  
    6060extern bool __preemption_enabled();
    6161
    62 static inline void __disable_interrupts_checked() {
    63         /* paranoid */ verify( __preemption_enabled() );
    64         disable_interrupts();
    65         /* paranoid */ verify( ! __preemption_enabled() );
    66 }
    67 
    68 static inline void __enable_interrupts_checked( bool poll = true ) {
    69         /* paranoid */ verify( ! __preemption_enabled() );
    70         enable_interrupts( poll );
    71         /* paranoid */ verify( __preemption_enabled() );
    72 }
    73 
    7462//release/wake-up the following resources
    7563void __thread_finish( thread$ * thrd );
Note: See TracChangeset for help on using the changeset viewer.