summaryrefslogtreecommitdiffstats
path: root/gcc/ada/s-taspri-mingw.ads
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-16 08:28:24 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-16 08:28:24 +0000
commit96d7aa326f2f5d9ef8eabc6965892cdcdeeee629 (patch)
tree4fb352539eb2da55b0cd66a4286daa9a48c396d2 /gcc/ada/s-taspri-mingw.ads
parent8bed087ed528783bb68ea3f8b65734158d09fcb7 (diff)
downloadppe42-gcc-96d7aa326f2f5d9ef8eabc6965892cdcdeeee629.tar.gz
ppe42-gcc-96d7aa326f2f5d9ef8eabc6965892cdcdeeee629.zip
2005-06-14 Jose Ruiz <ruiz@adacore.com>
Arnaud Charlet <charlet@adacore.com> * a-sytaco.ads, a-sytaco.adb (Suspension_Object): These objects are no longer protected objects. They have been replaced by lower-level suspension objects made up by a mutex and a condition variable (or their equivalent given a particular OS) plus some internal data to reflect the state of the suspension object. (Initialize, Finalize): Add this initialization procedure for Suspension_Object, which is a controlled type. (Finalize): Add the finalization procedure for Suspension_Object, which is a controlled type. * a-sytaco-vxworks.ads, a-sytaco-vxworks.adb: Remove this version of Ada.Synchronous_Task_Control because there is no longer a need for a VxWorks specific version of this package. Target dependencies has been moved to System.Task_Primitives.Operations. * s-osinte-mingw.ads (pCRITICAL_SECTION): Remove this type which is no longer needed. (InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection, DeleteCriticalSection): Replace the type pCriticalSection by an anonymous access type so that we avoid problems of accessibility to local objects. * s-taprop.ads, s-taprop-posix.adb, s-taprop-vxworks.adb, s-taprop-mingw.adb, s-taprop-vms.adb, s-taprop-solaris.adb, s-taprop-os2.adb, s-taprop-dummy.adb, s-taprop-hpux-dce.adb, s-taprop-linux.adb, s-taprop-irix.adb, s-taprop-irix-athread.adb, s-taprop-tru64.adb, s-taprop-lynxos.adb (Elaboration Code): No longer set the environment task mask here. (Current_State): Add this function that returns the state of the suspension object. (Set_False): Add this procedure that sets the state of the suspension object to False. (Set_True): Add this procedure that sets the state of the suspension object to True, releasing the task that was suspended, if any. (Suspend_Until_True): Add this procedure that blocks the calling task until the state of the object is True. Program_Error is raised if another task is already waiting on that suspension object. (Initialize): Add this procedure for initializing the suspension object. It initializes the mutex and the condition variable which are used for synchronization and queuing, and it sets the internal state to False. (Finalize): Add this procedure for finalizing the suspension object, destroying the mutex and the condition variable. * s-taspri-posix.ads, s-taspri-vxworks.ads, s-taspri-mingw.ads, s-taspri-vms.ads, s-taspri-solaris.ads, s-taspri-os2.ads, s-taspri-dummy.ads, s-taspri-hpux-dce.ads, s-taspri-linux.ads, s-taspri-tru64.ads, s-taspri-lynxos.ads (Suspension_Object): New object which provides a low-level abstraction (using operating system primitives) for Ada.Synchronous_Task_Control. This object is made up by a mutex (for ensuring mutual exclusion), a condition variable (for queuing threads until the condition is signaled), a Boolean (State) indicating whether the object is open, and a Boolean (Waiting) reflecting whether there is a task already suspended on this object. * s-intman.ads, s-intman-irix.adb, s-intman-irix-athread.adb, s-intman-dummy.adb, s-intman-solaris.adb, s-intman-vms.adb, s-intman-vms.ads, s-intman-mingw.adb, (Initialize_Interrupts): Removed, no longer used. * s-inmaop-posix.adb, s-inmaop-vms.adb, s-inmaop-dummy.adb, (Setup_Interrupt_Mask): New procedure. * s-intman-vxworks.ads, s-intman-vxworks.adb: Update comments. * s-inmaop.ads (Setup_Interrupt_Mask): New procedure * s-interr.adb: Add explicit call to Setup_Interrupt_Mask now that this is no longer done in the body of s-taprop (Server_Task): Explicitely test for Pending_Action in case System.Parameters.No_Abort is True. * s-taasde.adb: Add explicit call to Setup_Interrupt_Mask now that this is no longer done in the body of s-taprop git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101015 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/s-taspri-mingw.ads')
-rw-r--r--gcc/ada/s-taspri-mingw.ads44
1 files changed, 31 insertions, 13 deletions
diff --git a/gcc/ada/s-taspri-mingw.ads b/gcc/ada/s-taspri-mingw.ads
index 01cde2c6910..0e1707fc880 100644
--- a/gcc/ada/s-taspri-mingw.ads
+++ b/gcc/ada/s-taspri-mingw.ads
@@ -1,12 +1,12 @@
------------------------------------------------------------------------------
-- --
--- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS --
+-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . T A S K _ P R I M I T I V E S --
-- --
-- S p e c --
-- --
--- Copyright (C) 1991-2003 Free Software Foundation, Inc. --
+-- Copyright (C) 1991-2005 Free Software Foundation, Inc. --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -31,7 +31,7 @@
-- --
------------------------------------------------------------------------------
--- This is a NT (native) version of this package.
+-- This is a NT (native) version of this package
pragma Polling (Off);
-- Turn off polling, we do not want ATC polling to take place during
@@ -45,22 +45,24 @@ with System.OS_Interface;
package System.Task_Primitives is
type Lock is limited private;
- -- Should be used for implementation of protected objects.
+ -- Should be used for implementation of protected objects
type RTS_Lock is limited private;
- -- Should be used inside the runtime system.
- -- The difference between Lock and the RTS_Lock is that the later
- -- one serves only as a semaphore so that do not check for
- -- ceiling violations.
+ -- Should be used inside the runtime system. The difference between Lock
+ -- and the RTS_Lock is that the later one serves only as a semaphore so
+ -- that do not check for ceiling violations.
+
+ type Suspension_Object is limited private;
+ -- Should be used for the implementation of Ada.Synchronous_Task_Control
type Task_Body_Access is access procedure;
-- Pointer to the task body's entry point (or possibly a wrapper
-- declared local to the GNARL).
type Private_Data is limited private;
- -- Any information that the GNULLI needs maintained on a per-task
- -- basis. A component of this type is guaranteed to be included
- -- in the Ada_Task_Control_Block.
+ -- Any information that the GNULLI needs maintained on a per-task basis.
+ -- A component of this type is guaranteed to be included in the
+ -- Ada_Task_Control_Block.
private
@@ -74,6 +76,23 @@ private
type RTS_Lock is new System.OS_Interface.CRITICAL_SECTION;
+ type Suspension_Object is record
+ State : Boolean;
+ pragma Atomic (State);
+ -- Boolean that indicates whether the object is open. This field is
+ -- marked Atomic to ensure that we can read its value without locking
+ -- the access to the Suspension_Object.
+
+ Waiting : Boolean;
+ -- Flag showing if there is a task already suspended on this object
+
+ L : aliased System.OS_Interface.CRITICAL_SECTION;
+ -- Protection for ensuring mutual exclusion on the Suspension_Object
+
+ CV : aliased System.OS_Interface.HANDLE;
+ -- Condition variable used to queue threads until condition is signaled
+ end record;
+
type Private_Data is record
Thread : aliased System.OS_Interface.HANDLE;
pragma Atomic (Thread);
@@ -84,8 +103,7 @@ private
-- make sure is that they are updated in atomic fashion.
Thread_Id : aliased System.OS_Interface.DWORD;
- -- The purpose of this field is to provide a better tasking support
- -- in gdb.
+ -- Used to provide a better tasking support in gdb
CV : aliased Condition_Variable;
-- Condition Variable used to implement Sleep/Wakeup
OpenPOWER on IntegriCloud