home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
gnat-2.06-src.tgz
/
tar.out
/
fsf
/
gnat
/
ada
/
s-tasabo.adb
< prev
next >
Wrap
Text File
|
1996-09-28
|
4KB
|
108 lines
------------------------------------------------------------------------------
-- --
-- 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;