diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-03-17 06:51:56 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-03-17 08:27:47 +0100 |
commit | 92dee4ab9cf806553d0cdaeb4968d25ced4a8b3a (patch) | |
tree | 1149b8eb63ce39dc7c4ae0695b55d5180ce633e4 /cpukit/rtems/src/signalcatch.c | |
parent | rtems: Avoid Giant lock in rtems_task_mode() (diff) | |
download | rtems-92dee4ab9cf806553d0cdaeb4968d25ced4a8b3a.tar.bz2 |
rtems: Avoid Giant lock in rtems_signal_catch()
Update #2555.
Diffstat (limited to 'cpukit/rtems/src/signalcatch.c')
-rw-r--r-- | cpukit/rtems/src/signalcatch.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/cpukit/rtems/src/signalcatch.c b/cpukit/rtems/src/signalcatch.c index f0c62f7e14..7bf298d1d6 100644 --- a/cpukit/rtems/src/signalcatch.c +++ b/cpukit/rtems/src/signalcatch.c @@ -72,21 +72,22 @@ rtems_status_code rtems_signal_catch( Thread_Control *executing; RTEMS_API_Control *api; ASR_Information *asr; + ISR_lock_Context lock_context; executing = _Thread_Get_executing(); api = (RTEMS_API_Control*)executing->API_Extensions[ THREAD_API_RTEMS ]; asr = &api->Signal; - _Thread_Disable_dispatch(); /* cannot reschedule while */ - /* the thread is inconsistent */ + _ASR_Acquire( asr, &lock_context ); if ( !_ASR_Is_null_handler( asr_handler ) ) { asr->mode_set = mode_set; asr->handler = asr_handler; - } - else + } else { _ASR_Initialize( asr ); - _Thread_Enable_dispatch(); + } + + _ASR_Release( asr, &lock_context ); return RTEMS_SUCCESSFUL; } |