Removed obsolete (and apparently unneeded) AM_C_PROTOTYPES line, which
[AROS.git] / rom / exec / childstatus.c
blobd410e625e406e4f02c186d471b25596d2a0fcb73
1 /*
2 Copyright © 1995-2007, The AROS Development Team. All rights reserved.
3 $Id$
5 Find out the status of a child task.
6 */
7 #include "exec_intern.h"
8 #include <proto/exec.h>
10 /*****************************************************************************
12 NAME */
14 AROS_LH1(ULONG, ChildStatus,
16 /* SYNOPSIS */
17 AROS_LHA(ULONG, tid, D0),
19 /* LOCATION */
20 struct ExecBase *, SysBase, 125, Exec)
22 /* FUNCTION
23 Return the status of a child task. This allows the Task to
24 determine whether a particular child task is still running or not.
26 INPUTS
27 tid -- The ID of the task to examine. Note that this is _NOT_
28 a task pointer.
30 RESULT
31 One of the CHILD_* values.
33 NOTES
34 This function will work correctly only for child tasks that are
35 processes created with NP_NotifyOnDeath set to TRUE. Otherwise
36 it may report CHILD_NOTFOUND even if child already exited.
38 EXAMPLE
40 BUGS
42 SEE ALSO
44 INTERNALS
46 *****************************************************************************/
48 AROS_LIBFUNC_INIT
50 struct Task *this;
51 struct ETask *et;
52 struct ETask *child;
53 ULONG status = CHILD_NOTFOUND;
55 this = FindTask(NULL);
56 if ((this->tc_Flags & TF_ETASK) == 0)
57 return CHILD_NOTNEW;
59 et = this->tc_UnionETask.tc_ETask;
61 /* Sigh... */
62 Forbid();
64 /* Search through the running tasks list */
65 ForeachNode(&et->et_Children, child)
67 if (child->et_UniqueID == tid)
69 status = CHILD_ACTIVE;
70 break;
74 ForeachNode(&et->et_TaskMsgPort.mp_MsgList, child)
76 if (child->et_UniqueID == tid)
78 status = CHILD_EXITED;
79 break;
83 Permit();
84 return status;
86 AROS_LIBFUNC_EXIT
87 } /* ChildStatus */