Ignore:
File:
1 edited

Legend:

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

    rd3605f8 rae7adbc4  
    142142extern void __disable_interrupts_hard();
    143143extern void __enable_interrupts_hard();
    144 
    145 static inline void __disable_interrupts_checked() {
    146         /* paranoid */ verify( __preemption_enabled() );
    147         disable_interrupts();
    148         /* paranoid */ verify( ! __preemption_enabled() );
    149 }
    150 
    151 static inline void __enable_interrupts_checked( bool poll = true ) {
    152         /* paranoid */ verify( ! __preemption_enabled() );
    153         enable_interrupts( poll );
    154         /* paranoid */ verify( __preemption_enabled() );
    155 }
    156144
    157145
     
    749737
    750738        // Check if there is a sleeping processor
    751         int fd = __atomic_load_n(&this->procs.fd, __ATOMIC_SEQ_CST);
     739        // int fd = __atomic_load_n(&this->procs.fd, __ATOMIC_SEQ_CST);
     740        int fd = 0;
     741        if( __atomic_load_n(&this->procs.fd, __ATOMIC_SEQ_CST) != 0 ) {
     742                fd = __atomic_exchange_n(&this->procs.fd, 0, __ATOMIC_RELAXED);
     743        }
    752744
    753745        // If no one is sleeping, we are done
     
    776768// Unconditionnaly wake a thread
    777769void __wake_proc(processor * this) {
     770        /* paranoid */ verify( ! __preemption_enabled() );
     771
    778772        __cfadbg_print_safe(runtime_core, "Kernel : waking Processor %p\n", this);
    779773
    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();
     774        eventfd_t val;
     775        val = 1;
     776        eventfd_write( this->idle_fd, val );
     777
     778        /* paranoid */ verify( ! __preemption_enabled() );
    786779}
    787780
Note: See TracChangeset for help on using the changeset viewer.