Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/alarm.c

    re60e0dc r8cb529e  
    153153
    154154void register_self( alarm_node_t * this ) {
    155         alarm_list_t * alarms = &event_kernel->alarms;
     155        disable_interrupts();
     156        verify( !systemProcessor->pending_alarm );
     157        lock( &systemProcessor->alarm_lock DEBUG_CTX2 );
     158        {
     159                verify( validate( &systemProcessor->alarms ) );
     160                bool first = !systemProcessor->alarms.head;
    156161
    157         disable_interrupts();
    158         lock( &event_kernel->lock DEBUG_CTX2 );
    159         {
    160                 verify( validate( alarms ) );
    161                 bool first = !alarms->head;
    162 
    163                 insert( alarms, this );
     162                insert( &systemProcessor->alarms, this );
     163                if( systemProcessor->pending_alarm ) {
     164                        tick_preemption();
     165                }
    164166                if( first ) {
    165                         __kernel_set_timer( alarms->head->alarm - __kernel_get_time() );
     167                        __kernel_set_timer( systemProcessor->alarms.head->alarm - __kernel_get_time() );
    166168                }
    167169        }
    168         unlock( &event_kernel->lock );
     170        unlock( &systemProcessor->alarm_lock );
    169171        this->set = true;
    170172        enable_interrupts( DEBUG_CTX );
     
    172174
    173175void unregister_self( alarm_node_t * this ) {
     176        // LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, "Kernel : unregister %p start\n", this );
    174177        disable_interrupts();
    175         lock( &event_kernel->lock DEBUG_CTX2 );
     178        lock( &systemProcessor->alarm_lock DEBUG_CTX2 );
    176179        {
    177                 verify( validate( &event_kernel->alarms ) );
    178                 remove( &event_kernel->alarms, this );
     180                verify( validate( &systemProcessor->alarms ) );
     181                remove( &systemProcessor->alarms, this );
    179182        }
    180         unlock( &event_kernel->lock );
     183        unlock( &systemProcessor->alarm_lock );
    181184        enable_interrupts( DEBUG_CTX );
    182185        this->set = false;
     186        // LIB_DEBUG_PRINT_BUFFER_LOCAL( STDERR_FILENO, "Kernel : unregister %p end\n", this );
    183187}
Note: See TracChangeset for help on using the changeset viewer.