diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-06 06:44:41 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-12 13:24:40 +0200 |
commit | 6e4f929296b1cfd50fc8f41f117459e65214b816 (patch) | |
tree | 9819ea160f6c745dae1936ae296709026d3d47a2 /cpukit/posix/src/psignalunblockthread.c | |
parent | score: Add _Thread_queue_Is_lock_owner() (diff) | |
download | rtems-6e4f929296b1cfd50fc8f41f117459e65214b816.tar.bz2 |
score: Introduce thread state lock
Update #2556.
Diffstat (limited to 'cpukit/posix/src/psignalunblockthread.c')
-rw-r--r-- | cpukit/posix/src/psignalunblockthread.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/cpukit/posix/src/psignalunblockthread.c b/cpukit/posix/src/psignalunblockthread.c index df4a4915ba..5635afaa4e 100644 --- a/cpukit/posix/src/psignalunblockthread.c +++ b/cpukit/posix/src/psignalunblockthread.c @@ -91,19 +91,17 @@ static void _POSIX_signals_Check_signal( } static void _POSIX_signals_Action_handler( - Thread_Control *executing, - Thread_Action *action, - Per_CPU_Control *cpu, - ISR_Level level + Thread_Control *executing, + Thread_Action *action, + ISR_lock_Context *lock_context ) { POSIX_API_Control *api; int signo; - ISR_lock_Context lock_context; int hold_errno; (void) action; - _Thread_Action_release_and_ISR_enable( cpu, level ); + _Thread_State_release( executing, lock_context ); api = executing->API_Extensions[ THREAD_API_POSIX ]; @@ -137,13 +135,13 @@ static void _POSIX_signals_Action_handler( * processed at all. No point in doing this loop otherwise. */ while (1) { - _POSIX_signals_Acquire( &lock_context ); + _POSIX_signals_Acquire( lock_context ); if ( !(api->signals_unblocked & (api->signals_pending | _POSIX_signals_Pending)) ) { - _POSIX_signals_Release( &lock_context ); + _POSIX_signals_Release( lock_context ); break; } - _POSIX_signals_Release( &lock_context ); + _POSIX_signals_Release( lock_context ); for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) { _POSIX_signals_Check_signal( api, signo, false ); @@ -166,11 +164,15 @@ static bool _POSIX_signals_Unblock_thread_done( bool status ) { + ISR_lock_Context lock_context; + + _Thread_State_acquire( the_thread, &lock_context ); _Thread_Add_post_switch_action( the_thread, &api->Signal_action, _POSIX_signals_Action_handler ); + _Thread_State_release( the_thread, &lock_context ); return status; } |