summaryrefslogtreecommitdiff
path: root/cpukit/rtems/src/systemeventreceive.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-06-18 15:23:27 +0200
committerDaniel Hellstrom <daniel@gaisler.com>2014-06-26 10:25:26 +0200
commit61418ceabbcbd233974b8beb6ccb4eebe50ecbe7 (patch)
treec85ec80b2eb001a8b37d541e375578513ab0a583 /cpukit/rtems/src/systemeventreceive.c
parentaef4bc401435d5f63e1e5a92e8834d2f4f8b3343 (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.c7
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,