diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-03-04 08:02:19 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-03-05 11:36:45 +0100 |
commit | 7d6e94b12ab94f13d3e769702d50f91be7d5884b (patch) | |
tree | 2e2db2c1bb80c1f287f2c4c25f819ffa8b958704 /cpukit/rtems/src/systemeventsend.c | |
parent | score: Add thread wait flags (diff) | |
download | rtems-7d6e94b12ab94f13d3e769702d50f91be7d5884b.tar.bz2 |
score: Implement fine-grained locking for events
Use the ISR lock of the thread object to protect the event state and
use the Giant lock only for the blocking operations.
Update #2273.
Diffstat (limited to 'cpukit/rtems/src/systemeventsend.c')
-rw-r--r-- | cpukit/rtems/src/systemeventsend.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/cpukit/rtems/src/systemeventsend.c b/cpukit/rtems/src/systemeventsend.c index b2d55524e7..d35127d4bf 100644 --- a/cpukit/rtems/src/systemeventsend.c +++ b/cpukit/rtems/src/systemeventsend.c @@ -37,8 +37,9 @@ rtems_status_code rtems_event_system_send( Thread_Control *thread; Objects_Locations location; RTEMS_API_Control *api; + ISR_lock_Context lock_context; - thread = _Thread_Get( id, &location ); + thread = _Thread_Acquire( id, &location, &lock_context ); switch ( location ) { case OBJECTS_LOCAL: api = thread->API_Extensions[ THREAD_API_RTEMS ]; @@ -46,10 +47,9 @@ rtems_status_code rtems_event_system_send( thread, event_in, &api->System_event, - &_System_event_Sync_state, - STATES_WAITING_FOR_SYSTEM_EVENT + THREAD_WAIT_CLASS_SYSTEM_EVENT, + &lock_context ); - _Objects_Put( &thread->Object ); sc = RTEMS_SUCCESSFUL; break; #ifdef RTEMS_MULTIPROCESSING |