diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-09-02 06:48:53 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-09-02 06:48:53 +0000 |
commit | 423eae38aea08da825d12ba67573651f7384de08 (patch) | |
tree | 421c3d1e172072c112f9f90e3f03cd0f2ed80d42 /gcc/ada/s-taprop-linux.adb | |
parent | 98ef8f3599bcb37694df1aea03860787b3e0235b (diff) | |
download | gcc-423eae38aea08da825d12ba67573651f7384de08.tar.gz |
2011-09-02 Jose Ruiz <ruiz@adacore.com>
* s-taprop-linux.adb (Initialize_Lock, Initialize_TCB,
Initialize): Define and initialize the
mutex attributes and condition variable attributes locally.
2011-09-02 Vincent Celier <celier@adacore.com>
* prj-nmsc.adb (Check_File): Mark as Locally_Removed a naming
exception replaced in an extending project.
(Check_Object): No error when the other source is locally removed.
2011-09-02 Yannick Moy <moy@adacore.com>
* exp_ch6.adb (Is_Build_In_Place_Function_Call): in Alfa mode, allow
unresolved calls.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178432 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/s-taprop-linux.adb')
-rw-r--r-- | gcc/ada/s-taprop-linux.adb | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/gcc/ada/s-taprop-linux.adb b/gcc/ada/s-taprop-linux.adb index 6eeaf62a014..f4f5bc3f1b8 100644 --- a/gcc/ada/s-taprop-linux.adb +++ b/gcc/ada/s-taprop-linux.adb @@ -97,12 +97,6 @@ package body System.Task_Primitives.Operations is Dispatching_Policy : Character; pragma Import (C, Dispatching_Policy, "__gl_task_dispatching_policy"); - -- The following are effectively constants, but they need to be initialized - -- by calling a pthread_ function. - - Mutex_Attr : aliased pthread_mutexattr_t; - Cond_Attr : aliased pthread_condattr_t; - Foreign_Task_Elaborated : aliased Boolean := True; -- Used to identified fake tasks (i.e., non-Ada Threads) @@ -261,9 +255,13 @@ package body System.Task_Primitives.Operations is is pragma Unreferenced (Prio); - Result : Interfaces.C.int; + Mutex_Attr : aliased pthread_mutexattr_t; + Result : Interfaces.C.int; begin + Result := pthread_mutexattr_init (Mutex_Attr'Access); + pragma Assert (Result = 0); + Result := pthread_mutex_init (L, Mutex_Attr'Access); pragma Assert (Result = 0 or else Result = ENOMEM); @@ -279,9 +277,13 @@ package body System.Task_Primitives.Operations is is pragma Unreferenced (Level); - Result : Interfaces.C.int; + Mutex_Attr : aliased pthread_mutexattr_t; + Result : Interfaces.C.int; begin + Result := pthread_mutexattr_init (Mutex_Attr'Access); + pragma Assert (Result = 0); + Result := pthread_mutex_init (L, Mutex_Attr'Access); pragma Assert (Result = 0 or else Result = ENOMEM); @@ -762,7 +764,9 @@ package body System.Task_Primitives.Operations is -------------------- procedure Initialize_TCB (Self_ID : Task_Id; Succeeded : out Boolean) is - Result : Interfaces.C.int; + Mutex_Attr : aliased pthread_mutexattr_t; + Cond_Attr : aliased pthread_condattr_t; + Result : Interfaces.C.int; begin -- Give the task a unique serial number @@ -774,6 +778,9 @@ package body System.Task_Primitives.Operations is Self_ID.Common.LL.Thread := Null_Thread_Id; if not Single_Lock then + Result := pthread_mutexattr_init (Mutex_Attr'Access); + pragma Assert (Result = 0); + Result := pthread_mutex_init (Self_ID.Common.LL.L'Access, Mutex_Attr'Access); pragma Assert (Result = 0 or else Result = ENOMEM); @@ -784,6 +791,9 @@ package body System.Task_Primitives.Operations is end if; end if; + Result := pthread_condattr_init (Cond_Attr'Access); + pragma Assert (Result = 0); + Result := pthread_cond_init (Self_ID.Common.LL.CV'Access, Cond_Attr'Access); pragma Assert (Result = 0 or else Result = ENOMEM); @@ -1027,7 +1037,9 @@ package body System.Task_Primitives.Operations is ---------------- procedure Initialize (S : in out Suspension_Object) is - Result : Interfaces.C.int; + Mutex_Attr : aliased pthread_mutexattr_t; + Cond_Attr : aliased pthread_condattr_t; + Result : Interfaces.C.int; begin -- Initialize internal state (always to False (RM D.10(6))) @@ -1037,6 +1049,9 @@ package body System.Task_Primitives.Operations is -- Initialize internal mutex + Result := pthread_mutexattr_init (Mutex_Attr'Access); + pragma Assert (Result = 0); + Result := pthread_mutex_init (S.L'Access, Mutex_Attr'Access); pragma Assert (Result = 0 or else Result = ENOMEM); @@ -1047,6 +1062,9 @@ package body System.Task_Primitives.Operations is -- Initialize internal condition variable + Result := pthread_condattr_init (Cond_Attr'Access); + pragma Assert (Result = 0); + Result := pthread_cond_init (S.CV'Access, Cond_Attr'Access); pragma Assert (Result = 0 or else Result = ENOMEM); @@ -1340,12 +1358,6 @@ package body System.Task_Primitives.Operations is end if; end loop; - Result := pthread_mutexattr_init (Mutex_Attr'Access); - pragma Assert (Result = 0); - - Result := pthread_condattr_init (Cond_Attr'Access); - pragma Assert (Result = 0); - Initialize_Lock (Single_RTS_Lock'Access, RTS_Lock_Level); -- Initialize the global RTS lock |