summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/systemeventsend.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-03-04 08:02:19 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-03-05 11:36:45 +0100
commit7d6e94b12ab94f13d3e769702d50f91be7d5884b (patch)
tree2e2db2c1bb80c1f287f2c4c25f819ffa8b958704 /cpukit/rtems/src/systemeventsend.c
parentscore: Add thread wait flags (diff)
downloadrtems-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.c8
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