summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-07-29 12:46:40 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-07-30 09:53:25 +0200
commit6c0e43d31ae1eb1b0ef057880d7cefa425b2fc30 (patch)
tree5d239ea55be7890ad314eb26e89edc7f1ee101d5
parentsmptests/smppsxsignal01: New test (diff)
downloadrtems-6c0e43d31ae1eb1b0ef057880d7cefa425b2fc30.tar.bz2
score: Add and use _Thread_Signal_notification()
-rw-r--r--cpukit/posix/src/psignalunblockthread.c3
-rw-r--r--cpukit/posix/src/pthreadkill.c4
-rw-r--r--cpukit/rtems/src/signalsend.c4
-rw-r--r--cpukit/score/include/rtems/score/threadimpl.h7
4 files changed, 10 insertions, 8 deletions
diff --git a/cpukit/posix/src/psignalunblockthread.c b/cpukit/posix/src/psignalunblockthread.c
index fdf6137d6f..52bd140f2d 100644
--- a/cpukit/posix/src/psignalunblockthread.c
+++ b/cpukit/posix/src/psignalunblockthread.c
@@ -111,8 +111,7 @@ bool _POSIX_signals_Unblock_thread(
}
} else if ( the_thread->current_state == STATES_READY ) {
- if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
- _Thread_Dispatch_necessary = true;
+ _Thread_Signal_notification( the_thread );
}
}
return false;
diff --git a/cpukit/posix/src/pthreadkill.c b/cpukit/posix/src/pthreadkill.c
index 11287facba..9c839d7767 100644
--- a/cpukit/posix/src/pthreadkill.c
+++ b/cpukit/posix/src/pthreadkill.c
@@ -69,9 +69,7 @@ int pthread_kill(
api->signals_pending |= signo_to_mask( sig );
(void) _POSIX_signals_Unblock_thread( the_thread, sig, NULL );
-
- if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
- _Thread_Dispatch_necessary = true;
+ _Thread_Signal_notification( the_thread );
}
_Objects_Put( &the_thread->Object );
return 0;
diff --git a/cpukit/rtems/src/signalsend.c b/cpukit/rtems/src/signalsend.c
index 440405a40c..f1c7b2c254 100644
--- a/cpukit/rtems/src/signalsend.c
+++ b/cpukit/rtems/src/signalsend.c
@@ -47,9 +47,7 @@ rtems_status_code rtems_signal_send(
if ( ! _ASR_Is_null_handler( asr->handler ) ) {
if ( asr->is_enabled ) {
_ASR_Post_signals( signal_set, &asr->signals_posted );
-
- if ( _ISR_Is_in_progress() && _Thread_Is_executing( the_thread ) )
- _Thread_Dispatch_necessary = true;
+ _Thread_Signal_notification( the_thread );
} else {
_ASR_Post_signals( signal_set, &asr->signals_pending );
}
diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h
index 0496a7a802..d50980d4db 100644
--- a/cpukit/score/include/rtems/score/threadimpl.h
+++ b/cpukit/score/include/rtems/score/threadimpl.h
@@ -20,6 +20,7 @@
#define _RTEMS_SCORE_THREADIMPL_H
#include <rtems/score/thread.h>
+#include <rtems/score/isr.h>
#include <rtems/score/objectimpl.h>
#include <rtems/score/statesimpl.h>
@@ -657,6 +658,12 @@ RTEMS_INLINE_ROUTINE void _Thread_Dispatch_if_necessary(
}
}
+RTEMS_INLINE_ROUTINE void _Thread_Signal_notification( Thread_Control *thread )
+{
+ if ( _ISR_Is_in_progress() && _Thread_Is_executing( thread ) )
+ _Thread_Dispatch_necessary = true;
+}
+
#if !defined(__DYNAMIC_REENT__)
/**
* This routine returns the C library re-enterant pointer.