summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-10-07 16:26:31 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-10-07 16:26:31 +0000
commit4a4efb5fdecd8a1d64fa3253048752a165395aa1 (patch)
tree1f7126d01802aa442a0ec8c34c2acbaafc5b8a2e
parentAdded rtems_task_is_suspended. (diff)
downloadrtems-4a4efb5fdecd8a1d64fa3253048752a165395aa1.tar.bz2
New directive added -- rtems_task_is_suspended.
-rw-r--r--c/src/exec/rtems/src/Makefile.in2
-rw-r--r--c/src/exec/rtems/src/taskissuspended.c76
-rw-r--r--cpukit/rtems/src/taskissuspended.c76
3 files changed, 153 insertions, 1 deletions
diff --git a/c/src/exec/rtems/src/Makefile.in b/c/src/exec/rtems/src/Makefile.in
index ddb87ed80c..a09f6c0d5c 100644
--- a/c/src/exec/rtems/src/Makefile.in
+++ b/c/src/exec/rtems/src/Makefile.in
@@ -23,7 +23,7 @@ MP_C_PIECES_yes_V = eventmp mp msgmp partmp regionmp semmp signalmp taskmp
MP_C_PIECES = $(MP_C_PIECES_$(HAS_MP)_V)
TASK_C_PIECES = tasks taskcreate taskdelete taskgetnote taskident \
- taskinitusers taskmode taskrestart taskresume tasksetnote \
+ taskinitusers taskissuspended taskmode taskrestart taskresume tasksetnote \
tasksetpriority taskstart tasksuspend taskwakeafter taskwakewhen
RATEMON_C_PIECES = ratemon ratemoncancel ratemoncreate ratemondelete \
diff --git a/c/src/exec/rtems/src/taskissuspended.c b/c/src/exec/rtems/src/taskissuspended.c
new file mode 100644
index 0000000000..31feb79fb7
--- /dev/null
+++ b/c/src/exec/rtems/src/taskissuspended.c
@@ -0,0 +1,76 @@
+/*
+ * RTEMS Task Manager
+ *
+ *
+ * COPYRIGHT (c) 1989-1998.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/rtems/status.h>
+#include <rtems/rtems/support.h>
+#include <rtems/rtems/modes.h>
+#include <rtems/score/object.h>
+#include <rtems/score/stack.h>
+#include <rtems/score/states.h>
+#include <rtems/rtems/tasks.h>
+#include <rtems/score/thread.h>
+#include <rtems/score/threadq.h>
+#include <rtems/score/tod.h>
+#include <rtems/score/userext.h>
+#include <rtems/score/wkspace.h>
+#include <rtems/score/apiext.h>
+#include <rtems/score/sysstate.h>
+
+/*PAGE
+ *
+ * rtems_task_is_suspended
+ *
+ * This directive returns a status indicating whether or not
+ * the specified task is suspended.
+ *
+ * Input parameters:
+ * id - thread id
+ *
+ * Output parameters:
+ * RTEMS_SUCCESSFUL - if successful and not suspended
+ * RTEMS_ALREADY_SUSPENDED - if successful and suspended
+ * error code - if unsuccessful
+ */
+
+rtems_status_code rtems_task_is_suspended(
+ Objects_Id id
+)
+{
+ register Thread_Control *the_thread;
+ Objects_Locations location;
+
+ the_thread = _Thread_Get( id, &location );
+ switch ( location ) {
+
+ case OBJECTS_REMOTE:
+
+#if defined(RTEMS_MULTIPROCESSING)
+ _Thread_Dispatch();
+ return RTEMS_ILLEGAL_ON_REMOTE_OBJECT;
+#endif
+
+ case OBJECTS_ERROR:
+ return RTEMS_INVALID_ID;
+
+ case OBJECTS_LOCAL:
+ if ( !_States_Is_suspended( the_thread->current_state ) ) {
+ _Thread_Enable_dispatch();
+ return RTEMS_SUCCESSFUL;
+ }
+ _Thread_Enable_dispatch();
+ return RTEMS_ALREADY_SUSPENDED;
+ }
+}
diff --git a/cpukit/rtems/src/taskissuspended.c b/cpukit/rtems/src/taskissuspended.c
new file mode 100644
index 0000000000..31feb79fb7
--- /dev/null
+++ b/cpukit/rtems/src/taskissuspended.c
@@ -0,0 +1,76 @@
+/*
+ * RTEMS Task Manager
+ *
+ *
+ * COPYRIGHT (c) 1989-1998.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/rtems/status.h>
+#include <rtems/rtems/support.h>
+#include <rtems/rtems/modes.h>
+#include <rtems/score/object.h>
+#include <rtems/score/stack.h>
+#include <rtems/score/states.h>
+#include <rtems/rtems/tasks.h>
+#include <rtems/score/thread.h>
+#include <rtems/score/threadq.h>
+#include <rtems/score/tod.h>
+#include <rtems/score/userext.h>
+#include <rtems/score/wkspace.h>
+#include <rtems/score/apiext.h>
+#include <rtems/score/sysstate.h>
+
+/*PAGE
+ *
+ * rtems_task_is_suspended
+ *
+ * This directive returns a status indicating whether or not
+ * the specified task is suspended.
+ *
+ * Input parameters:
+ * id - thread id
+ *
+ * Output parameters:
+ * RTEMS_SUCCESSFUL - if successful and not suspended
+ * RTEMS_ALREADY_SUSPENDED - if successful and suspended
+ * error code - if unsuccessful
+ */
+
+rtems_status_code rtems_task_is_suspended(
+ Objects_Id id
+)
+{
+ register Thread_Control *the_thread;
+ Objects_Locations location;
+
+ the_thread = _Thread_Get( id, &location );
+ switch ( location ) {
+
+ case OBJECTS_REMOTE:
+
+#if defined(RTEMS_MULTIPROCESSING)
+ _Thread_Dispatch();
+ return RTEMS_ILLEGAL_ON_REMOTE_OBJECT;
+#endif
+
+ case OBJECTS_ERROR:
+ return RTEMS_INVALID_ID;
+
+ case OBJECTS_LOCAL:
+ if ( !_States_Is_suspended( the_thread->current_state ) ) {
+ _Thread_Enable_dispatch();
+ return RTEMS_SUCCESSFUL;
+ }
+ _Thread_Enable_dispatch();
+ return RTEMS_ALREADY_SUSPENDED;
+ }
+}