home *** CD-ROM | disk | FTP | other *** search
- ------------------------------------------------------------------------------
- -- --
- -- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
- -- --
- -- S Y S T E M . T A S K I N G . A B O R T I O N --
- -- --
- -- B o d y --
- -- --
- -- $Revision: 1.15 $ --
- -- --
- -- Copyright (c) 1991,1992,1993,1994,1995 FSU, All Rights Reserved --
- -- --
- -- GNARL is free software; you can redistribute it and/or modify it under --
- -- terms of the GNU Library General Public License as published by the --
- -- Free Software Foundation; either version 2, or (at your option) any --
- -- later version. GNARL is distributed in the hope that it will be use- --
- -- ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
- -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Gen- --
- -- eral Library Public License for more details. You should have received --
- -- a copy of the GNU Library General Public License along with GNARL; see --
- -- file COPYING.LIB. If not, write to the Free Software Foundation, 675 --
- -- Mass Ave, Cambridge, MA 02139, USA. --
- -- --
- ------------------------------------------------------------------------------
-
- with System.Tasking.Utilities;
- -- Used for, Utilities.All_Tasks_L,
- -- Utilities.All_Tasks_List
- -- Utilities.Abort_To_Level,
- -- Utilities.Abort_Dependents
-
- with System.Tasking.Initialization;
- -- Used for, Defer_Abortion
- -- Undefer_Abortion
- -- Change_Base_Priority
-
- with System.Task_Primitives; use System.Task_Primitives;
-
- package body System.Tasking.Abortion is
-
- --------------------------
- -- Change_Base_Priority --
- --------------------------
-
- procedure Change_Base_Priority (T : Task_ID) renames
- System.Tasking.Initialization.Change_Base_Priority;
-
- --------------------
- -- Defer_Abortion --
- --------------------
-
- procedure Defer_Abortion renames
- System.Tasking.Initialization.Defer_Abortion;
-
- ----------------------
- -- Undefer_Abortion --
- ----------------------
-
- procedure Undefer_Abortion renames
- System.Tasking.Initialization.Undefer_Abortion;
-
- -----------------
- -- Abort_Tasks --
- -----------------
-
- -- Called to initiate abortion, however, the actual abortion
- -- is done by abortee by means of Abort_Handler
-
- procedure Abort_Tasks (Tasks : Task_List) is
- Abortee : Task_ID;
- Aborter : Task_ID;
- Activator : Task_ID;
- TAS_Result : Boolean;
- Old_Pending_ATC_Level : ATC_Level_Base;
-
- begin
- Defer_Abortion;
-
- -- Begin non-abortable section
-
- Aborter := Self;
-
- for J in Tasks'Range loop
-
- Abortee := Tasks (J);
-
- if Abortee.Stage = Created then
- Utilities.Complete (Abortee);
- Abortee.Stage := Terminated;
- -- Task aborted before activation is safe to complete
- -- Mark This task to be terminated.
- else
- Abortee.Accepting := Not_Accepting;
- Utilities.Complete_on_Sync_Point (Abortee);
- Utilities.Abort_To_Level (Abortee, 0);
- -- Process abortion of child tasks
- Utilities.Abort_Dependents (Abortee);
- end if;
-
- end loop;
-
- -- End non-abortable section
-
- Undefer_Abortion;
- end Abort_Tasks;
-
- end System.Tasking.Abortion;
-