Changes in src/libcfa/concurrency/alarm.c [e60e0dc:8cb529e]
- File:
-
- 1 edited
-
src/libcfa/concurrency/alarm.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/concurrency/alarm.c
re60e0dc r8cb529e 153 153 154 154 void 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; 156 161 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 } 164 166 if( first ) { 165 __kernel_set_timer( alarms->head->alarm - __kernel_get_time() );167 __kernel_set_timer( systemProcessor->alarms.head->alarm - __kernel_get_time() ); 166 168 } 167 169 } 168 unlock( & event_kernel->lock );170 unlock( &systemProcessor->alarm_lock ); 169 171 this->set = true; 170 172 enable_interrupts( DEBUG_CTX ); … … 172 174 173 175 void unregister_self( alarm_node_t * this ) { 176 // LIB_DEBUG_PRINT_BUFFER_DECL( STDERR_FILENO, "Kernel : unregister %p start\n", this ); 174 177 disable_interrupts(); 175 lock( & event_kernel->lock DEBUG_CTX2 );178 lock( &systemProcessor->alarm_lock DEBUG_CTX2 ); 176 179 { 177 verify( validate( & event_kernel->alarms ) );178 remove( & event_kernel->alarms, this );180 verify( validate( &systemProcessor->alarms ) ); 181 remove( &systemProcessor->alarms, this ); 179 182 } 180 unlock( & event_kernel->lock );183 unlock( &systemProcessor->alarm_lock ); 181 184 enable_interrupts( DEBUG_CTX ); 182 185 this->set = false; 186 // LIB_DEBUG_PRINT_BUFFER_LOCAL( STDERR_FILENO, "Kernel : unregister %p end\n", this ); 183 187 }
Note:
See TracChangeset
for help on using the changeset viewer.