home *** CD-ROM | disk | FTP | other *** search
- #include <arpbase.h>
- #include <arp_proto.h>
- #include "Launch.h"
- #include "LaunchPriv.h"
-
-
- /*
- * NAME
- * ChildEntry -- used when starting processes.
- *
- * SYNOPSIS
- * ChildEntry ()
- *
- * FUNCTION
- * Call the process' entry point with its data.
- *
- * DESCRIPTION
- * It load the A4 register, find the process pair (parent/child),
- * allocate the child's kill signal and then call the child entry
- * point with the data given by the parent. On exit, it clears
- * the entry point and signal the parent.
- *
- * INPUT
- * None.
- *
- * OUTPUT
- * None.
- *
- * NOTE
- * We currently use the break C signal as the kill signal. This
- * let the user kill the process himself (if anything should go
- * wrong...).
- *
- * HISTORY
- * 1992/09/06 Pierre Baillargeon Creation
- * 1992/09/07 Pierre Baillargeon Correction
- * Now, the node removal and memory freeing is done
- * in the parent. Otherwise the parent signal bit
- * would not always be freed.
- *
- * SEE ALSO
- * StartProcess()
- */
-
- void __saveds ChildEntry (void)
- {
- struct ProcPair *pp;
- struct Process *Proc;
-
- Proc = (struct Process *)FindTask (NULL);
- Wait (1L << Proc->pr_MsgPort.mp_SigBit);
-
- Forbid ();
- pp = IsChild (Proc);
- Permit ();
-
- if (pp)
- {
- pp->pp_ChildBit = AllocSignal (KILL_PROCESS_FLAG);
- pp->pp_ChildEntry (pp->pp_ChildData);
- Forbid ();
- pp->pp_ChildEntry = NULL;
- Signal (pp->pp_Parent, 1L << pp->pp_ParentBit);
- }
- }
-