diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-04 10:09:45 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-06 08:17:04 +0200 |
commit | bb2ad039a7246eecde65592a5116c86d3dede34b (patch) | |
tree | aee3f4b3200d35f7dfc4968bc4a04c5fcac5b262 /cpukit/rtems/src/signalcatch.c | |
parent | mpci: Avoid Giant lock in _MPCI_Process_response() (diff) | |
download | rtems-bb2ad039a7246eecde65592a5116c86d3dede34b.tar.bz2 |
rtems: Avoid Giant lock for signals
Update #2555.
Diffstat (limited to 'cpukit/rtems/src/signalcatch.c')
-rw-r--r-- | cpukit/rtems/src/signalcatch.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/cpukit/rtems/src/signalcatch.c b/cpukit/rtems/src/signalcatch.c index 7bf298d1d6..73138a1015 100644 --- a/cpukit/rtems/src/signalcatch.c +++ b/cpukit/rtems/src/signalcatch.c @@ -22,8 +22,6 @@ #include <rtems/rtems/signalimpl.h> #include <rtems/rtems/asrimpl.h> #include <rtems/rtems/tasks.h> -#include <rtems/score/isrlevel.h> -#include <rtems/score/threaddispatch.h> #include <rtems/score/threadimpl.h> void _Signal_Action_handler( @@ -52,8 +50,9 @@ void _Signal_Action_handler( asr = &api->Signal; signal_set = _ASR_Get_posted_signals( asr ); - if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */ + if ( signal_set == 0 ) { return; + } asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); @@ -74,11 +73,12 @@ rtems_status_code rtems_signal_catch( ASR_Information *asr; ISR_lock_Context lock_context; - executing = _Thread_Get_executing(); - api = (RTEMS_API_Control*)executing->API_Extensions[ THREAD_API_RTEMS ]; + _ISR_lock_ISR_disable( &lock_context ); + executing = _Thread_Executing; + api = executing->API_Extensions[ THREAD_API_RTEMS ]; asr = &api->Signal; - _ASR_Acquire( asr, &lock_context ); + _ASR_Acquire_critical( asr, &lock_context ); if ( !_ASR_Is_null_handler( asr_handler ) ) { asr->mode_set = mode_set; |