Changeset a8cd94a in rtems
- Timestamp:
- 12/01/95 19:28:58 (28 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 3837215d
- Parents:
- 7f6fab6
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/exec/rtems/src/event.c
r7f6fab6 ra8cd94a 171 171 } 172 172 173 _Event_Sync = TRUE; 173 _Event_Sync = TRUE; 174 _Event_Sync_state = EVENT_SYNC_NOTHING_HAPPENED; 175 174 176 executing->Wait.option = (unsigned32) option_set; 175 177 executing->Wait.count = (unsigned32) event_in; … … 177 179 178 180 _ISR_Enable( level ); 179 _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );180 181 181 182 if ( ticks ) { … … 189 190 &executing->Timer, 190 191 ticks, 191 WATCHDOG_ NO_ACTIVATE192 WATCHDOG_ACTIVATE_NOW 192 193 ); 193 194 } 195 196 _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT ); 194 197 195 198 _ISR_Disable( level ); 196 199 if ( _Event_Sync == TRUE ) { 197 200 _Event_Sync = FALSE; 198 if ( ticks )199 _Watchdog_Activate( &executing->Timer );200 201 _ISR_Enable( level ); 201 202 return; 202 203 } 204 if ( _Event_Sync_state == EVENT_SYNC_TIMEOUT ) 205 executing->Wait.return_code = RTEMS_TIMEOUT; 203 206 _ISR_Enable( level ); 204 (void) _Watchdog_Remove( &executing->Timer ); 207 if ( ticks ) 208 (void) _Watchdog_Remove( &executing->Timer ); 205 209 _Thread_Unblock( executing ); 206 210 return; … … 267 271 } 268 272 } 269 else if ( _ Thread_Is_executing( the_thread ) && _Event_Sync == TRUE) {273 else if ( _Event_Sync == TRUE && _Thread_Is_executing( the_thread ) ) { 270 274 if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { 271 275 api->pending_events = _Event_sets_Clear( pending_events,seized_events ); 272 276 *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 273 _Event_Sync = FALSE;277 _Event_Sync_state = EVENT_SYNC_SATISFIED; 274 278 } 275 279 } … … 305 309 break; 306 310 case OBJECTS_LOCAL: 307 the_thread->Wait.return_code = RTEMS_TIMEOUT; 308 _Thread_Unblock( the_thread ); 311 if ( _Event_Sync == TRUE && _Thread_Is_executing( the_thread ) ) { 312 if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) 313 _Event_Sync_state = EVENT_SYNC_TIMEOUT; 314 } else { 315 the_thread->Wait.return_code = RTEMS_TIMEOUT; 316 _Thread_Unblock( the_thread ); 317 } 309 318 _Thread_Unnest_dispatch(); 310 319 break; -
cpukit/rtems/src/event.c
r7f6fab6 ra8cd94a 171 171 } 172 172 173 _Event_Sync = TRUE; 173 _Event_Sync = TRUE; 174 _Event_Sync_state = EVENT_SYNC_NOTHING_HAPPENED; 175 174 176 executing->Wait.option = (unsigned32) option_set; 175 177 executing->Wait.count = (unsigned32) event_in; … … 177 179 178 180 _ISR_Enable( level ); 179 _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT );180 181 181 182 if ( ticks ) { … … 189 190 &executing->Timer, 190 191 ticks, 191 WATCHDOG_ NO_ACTIVATE192 WATCHDOG_ACTIVATE_NOW 192 193 ); 193 194 } 195 196 _Thread_Set_state( executing, STATES_WAITING_FOR_EVENT ); 194 197 195 198 _ISR_Disable( level ); 196 199 if ( _Event_Sync == TRUE ) { 197 200 _Event_Sync = FALSE; 198 if ( ticks )199 _Watchdog_Activate( &executing->Timer );200 201 _ISR_Enable( level ); 201 202 return; 202 203 } 204 if ( _Event_Sync_state == EVENT_SYNC_TIMEOUT ) 205 executing->Wait.return_code = RTEMS_TIMEOUT; 203 206 _ISR_Enable( level ); 204 (void) _Watchdog_Remove( &executing->Timer ); 207 if ( ticks ) 208 (void) _Watchdog_Remove( &executing->Timer ); 205 209 _Thread_Unblock( executing ); 206 210 return; … … 267 271 } 268 272 } 269 else if ( _ Thread_Is_executing( the_thread ) && _Event_Sync == TRUE) {273 else if ( _Event_Sync == TRUE && _Thread_Is_executing( the_thread ) ) { 270 274 if ( seized_events == event_condition || _Options_Is_any( option_set ) ) { 271 275 api->pending_events = _Event_sets_Clear( pending_events,seized_events ); 272 276 *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; 273 _Event_Sync = FALSE;277 _Event_Sync_state = EVENT_SYNC_SATISFIED; 274 278 } 275 279 } … … 305 309 break; 306 310 case OBJECTS_LOCAL: 307 the_thread->Wait.return_code = RTEMS_TIMEOUT; 308 _Thread_Unblock( the_thread ); 311 if ( _Event_Sync == TRUE && _Thread_Is_executing( the_thread ) ) { 312 if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) 313 _Event_Sync_state = EVENT_SYNC_TIMEOUT; 314 } else { 315 the_thread->Wait.return_code = RTEMS_TIMEOUT; 316 _Thread_Unblock( the_thread ); 317 } 309 318 _Thread_Unnest_dispatch(); 310 319 break;
Note: See TracChangeset
for help on using the changeset viewer.