diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-06-18 15:23:27 +0200 |
---|---|---|
committer | Daniel Hellstrom <daniel@gaisler.com> | 2014-06-26 10:25:26 +0200 |
commit | 61418ceabbcbd233974b8beb6ccb4eebe50ecbe7 (patch) | |
tree | c85ec80b2eb001a8b37d541e375578513ab0a583 /cpukit/rtems/src/systemeventreceive.c | |
parent | aef4bc401435d5f63e1e5a92e8834d2f4f8b3343 (diff) |
score: Fix thread deletion on SMPsmp-toolchain-3
All blocking operations using _Thread_Get() in the corresponding release
operation must check for thread termination after
_Thread_Disable_dispatch() on SMP.
Diffstat (limited to 'cpukit/rtems/src/systemeventreceive.c')
-rw-r--r-- | cpukit/rtems/src/systemeventreceive.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/cpukit/rtems/src/systemeventreceive.c b/cpukit/rtems/src/systemeventreceive.c index c24e19a8ef..c38962d21d 100644 --- a/cpukit/rtems/src/systemeventreceive.c +++ b/cpukit/rtems/src/systemeventreceive.c @@ -28,6 +28,7 @@ #include <rtems/rtems/tasks.h> #include <rtems/score/statesimpl.h> #include <rtems/score/threaddispatch.h> +#include <rtems/score/threadimpl.h> rtems_status_code rtems_event_system_receive( rtems_event_set event_in, @@ -45,6 +46,12 @@ rtems_status_code rtems_event_system_receive( if ( !_Event_sets_Is_empty( event_in ) ) { _Thread_Disable_dispatch(); +#if defined(RTEMS_SMP) + if ( _Thread_Is_life_terminating( executing->Life.state ) ) { + _Thread_Enable_dispatch(); + _Assert_Not_reached(); + } +#endif _Event_Seize( event_in, option_set, |