aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/libgnarl
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-03-04 12:44:11 +0100
committerMarc Poulhiès <poulhies@adacore.com>2024-05-17 10:21:05 +0200
commit3a5c4f926676bada86b7862ec0257ac5170b7976 (patch)
treef219ac2a0da17cd755d481e661633ffea75a6b1d /gcc/ada/libgnarl
parent75de817d88aade7fc5e8b4bebe3f179f1c5b6a87 (diff)
downloadgcc-3a5c4f926676bada86b7862ec0257ac5170b7976.zip
gcc-3a5c4f926676bada86b7862ec0257ac5170b7976.tar.gz
gcc-3a5c4f926676bada86b7862ec0257ac5170b7976.tar.bz2
ada: Factor out duplicated code in bodies of System.Task_Primitives.Operations
The duplication is present in some POSIX-like implementations (POSIX and RTEMS) while it has already been eliminated in others (Linux, QNX). The latter implementations are also slightly modified for consistency's sake. No functional changes. gcc/ada/ * libgnarl/s-taprop__dummy.adb (Initialize_Lock): Fix formatting. * libgnarl/s-taprop__linux.adb (RTS_Lock_Ptr): Delete. (Init_Mutex): Rename into... (Initialize_Lock): ...this. (Initialize_Lock [Lock]): Call above procedure. (Initialize_Lock [RTS_Lock]): Likewise. (Initialize_TCB): Likewise. * libgnarl/s-taprop__posix.adb (Initialize_Lock): New procedure factored out from the other two homonyms. (Initialize_Lock [Lock]): Call above procedure. (Initialize_Lock [RTS_Lock]): Likewise. * libgnarl/s-taprop__qnx.adb (RTS_Lock_Ptr): Delete. (Init_Mutex): Rename into... (Initialize_Lock): ...this. (Initialize_Lock [Lock]): Call above procedure. (Initialize_Lock [RTS_Lock]): Likewise. (Initialize_TCB): Likewise. * libgnarl/s-taprop__rtems.adb (Initialize_Lock): New procedure factored out from the other two homonyms. (Initialize_Lock [Lock]): Call above procedure. (Initialize_Lock [RTS_Lock]): Likewise.
Diffstat (limited to 'gcc/ada/libgnarl')
-rw-r--r--gcc/ada/libgnarl/s-taprop__dummy.adb4
-rw-r--r--gcc/ada/libgnarl/s-taprop__linux.adb47
-rw-r--r--gcc/ada/libgnarl/s-taprop__posix.adb61
-rw-r--r--gcc/ada/libgnarl/s-taprop__qnx.adb46
-rw-r--r--gcc/ada/libgnarl/s-taprop__rtems.adb61
5 files changed, 90 insertions, 129 deletions
diff --git a/gcc/ada/libgnarl/s-taprop__dummy.adb b/gcc/ada/libgnarl/s-taprop__dummy.adb
index 90c4cd4..829d595 100644
--- a/gcc/ada/libgnarl/s-taprop__dummy.adb
+++ b/gcc/ada/libgnarl/s-taprop__dummy.adb
@@ -239,7 +239,9 @@ package body System.Task_Primitives.Operations is
end Initialize_Lock;
procedure Initialize_Lock
- (L : not null access RTS_Lock; Level : Lock_Level) is
+ (L : not null access RTS_Lock;
+ Level : Lock_Level)
+ is
begin
null;
end Initialize_Lock;
diff --git a/gcc/ada/libgnarl/s-taprop__linux.adb b/gcc/ada/libgnarl/s-taprop__linux.adb
index d6a29b5..74717cb 100644
--- a/gcc/ada/libgnarl/s-taprop__linux.adb
+++ b/gcc/ada/libgnarl/s-taprop__linux.adb
@@ -248,10 +248,10 @@ package body System.Task_Primitives.Operations is
-- as in "sudo /sbin/setcap cap_sys_nice=ep exe_file". If it doesn't have
-- permission, then a request for Ceiling_Locking is ignored.
- type RTS_Lock_Ptr is not null access all RTS_Lock;
-
- function Init_Mutex (L : RTS_Lock_Ptr; Prio : Any_Priority) return C.int;
- -- Initialize the mutex L. If Ceiling_Support is True, then set the ceiling
+ function Initialize_Lock
+ (L : not null access RTS_Lock;
+ Prio : Any_Priority) return C.int;
+ -- Initialize the lock L. If Ceiling_Support is True, then set the ceiling
-- to Prio. Returns 0 for success, or ENOMEM for out-of-memory.
-------------------
@@ -340,11 +340,20 @@ package body System.Task_Primitives.Operations is
function Self return Task_Id renames Specific.Self;
- ----------------
- -- Init_Mutex --
- ----------------
+ ---------------------
+ -- Initialize_Lock --
+ ---------------------
- function Init_Mutex (L : RTS_Lock_Ptr; Prio : Any_Priority) return C.int is
+ -- Note: mutexes and cond_variables needed per-task basis are initialized
+ -- in Initialize_TCB and the Storage_Error is handled. Other mutexes (such
+ -- as RTS_Lock, Memory_Lock...) used in RTS is initialized before any
+ -- status change of RTS. Therefore raising Storage_Error in the following
+ -- routines should be able to be handled safely.
+
+ function Initialize_Lock
+ (L : not null access RTS_Lock;
+ Prio : Any_Priority) return C.int
+ is
Mutex_Attr : aliased pthread_mutexattr_t;
Result, Result_2 : C.int;
@@ -377,17 +386,7 @@ package body System.Task_Primitives.Operations is
Result_2 := pthread_mutexattr_destroy (Mutex_Attr'Access);
pragma Assert (Result_2 = 0);
return Result; -- of pthread_mutex_init, not pthread_mutexattr_destroy
- end Init_Mutex;
-
- ---------------------
- -- Initialize_Lock --
- ---------------------
-
- -- Note: mutexes and cond_variables needed per-task basis are initialized
- -- in Initialize_TCB and the Storage_Error is handled. Other mutexes (such
- -- as RTS_Lock, Memory_Lock...) used in RTS is initialized before any
- -- status change of RTS. Therefore raising Storage_Error in the following
- -- routines should be able to be handled safely.
+ end Initialize_Lock;
procedure Initialize_Lock
(Prio : Any_Priority;
@@ -420,18 +419,19 @@ package body System.Task_Primitives.Operations is
end;
else
- if Init_Mutex (L.WO'Access, Prio) = ENOMEM then
+ if Initialize_Lock (L.WO'Access, Prio) = ENOMEM then
raise Storage_Error with "Failed to allocate a lock";
end if;
end if;
end Initialize_Lock;
procedure Initialize_Lock
- (L : not null access RTS_Lock; Level : Lock_Level)
+ (L : not null access RTS_Lock;
+ Level : Lock_Level)
is
pragma Unreferenced (Level);
begin
- if Init_Mutex (L.all'Access, Any_Priority'Last) = ENOMEM then
+ if Initialize_Lock (L, Any_Priority'Last) = ENOMEM then
raise Storage_Error with "Failed to allocate a lock";
end if;
end Initialize_Lock;
@@ -840,7 +840,8 @@ package body System.Task_Primitives.Operations is
Self_ID.Common.LL.Thread := Null_Thread_Id;
- if Init_Mutex (Self_ID.Common.LL.L'Access, Any_Priority'Last) /= 0 then
+ if Initialize_Lock (Self_ID.Common.LL.L'Access, Any_Priority'Last) /= 0
+ then
Succeeded := False;
return;
end if;
diff --git a/gcc/ada/libgnarl/s-taprop__posix.adb b/gcc/ada/libgnarl/s-taprop__posix.adb
index 7969412..a71e421 100644
--- a/gcc/ada/libgnarl/s-taprop__posix.adb
+++ b/gcc/ada/libgnarl/s-taprop__posix.adb
@@ -211,6 +211,11 @@ package body System.Task_Primitives.Operations is
pragma Import (C,
GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
+ procedure Initialize_Lock
+ (L : not null access RTS_Lock;
+ Prio : System.Any_Priority);
+ -- Initialize an RTS_Lock with the specified priority
+
-------------------
-- Abort_Handler --
-------------------
@@ -319,11 +324,11 @@ package body System.Task_Primitives.Operations is
-- routines should be able to be handled safely.
procedure Initialize_Lock
- (Prio : System.Any_Priority;
- L : not null access Lock)
+ (L : not null access RTS_Lock;
+ Prio : System.Any_Priority)
is
Attributes : aliased pthread_mutexattr_t;
- Result : Interfaces.C.int;
+ Result : Interfaces.C.int;
begin
Result := pthread_mutexattr_init (Attributes'Access);
@@ -348,7 +353,7 @@ package body System.Task_Primitives.Operations is
pragma Assert (Result = 0);
end if;
- Result := pthread_mutex_init (L.WO'Access, Attributes'Access);
+ Result := pthread_mutex_init (L, Attributes'Access);
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result = ENOMEM then
@@ -361,46 +366,20 @@ package body System.Task_Primitives.Operations is
end Initialize_Lock;
procedure Initialize_Lock
- (L : not null access RTS_Lock; Level : Lock_Level)
+ (Prio : System.Any_Priority;
+ L : not null access Lock)
is
- pragma Unreferenced (Level);
-
- Attributes : aliased pthread_mutexattr_t;
- Result : Interfaces.C.int;
-
begin
- Result := pthread_mutexattr_init (Attributes'Access);
- pragma Assert (Result = 0 or else Result = ENOMEM);
-
- if Result = ENOMEM then
- raise Storage_Error;
- end if;
-
- if Locking_Policy = 'C' then
- Result := pthread_mutexattr_setprotocol
- (Attributes'Access, PTHREAD_PRIO_PROTECT);
- pragma Assert (Result = 0);
-
- Result := pthread_mutexattr_setprioceiling
- (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
- pragma Assert (Result = 0);
-
- elsif Locking_Policy = 'I' then
- Result := pthread_mutexattr_setprotocol
- (Attributes'Access, PTHREAD_PRIO_INHERIT);
- pragma Assert (Result = 0);
- end if;
-
- Result := pthread_mutex_init (L, Attributes'Access);
- pragma Assert (Result = 0 or else Result = ENOMEM);
-
- if Result = ENOMEM then
- Result := pthread_mutexattr_destroy (Attributes'Access);
- raise Storage_Error;
- end if;
+ Initialize_Lock (L.WO'Access, Prio);
+ end Initialize_Lock;
- Result := pthread_mutexattr_destroy (Attributes'Access);
- pragma Assert (Result = 0);
+ procedure Initialize_Lock
+ (L : not null access RTS_Lock;
+ Level : Lock_Level)
+ is
+ pragma Unreferenced (Level);
+ begin
+ Initialize_Lock (L, System.Any_Priority'Last);
end Initialize_Lock;
-------------------
diff --git a/gcc/ada/libgnarl/s-taprop__qnx.adb b/gcc/ada/libgnarl/s-taprop__qnx.adb
index 8b98af7..2f11d28 100644
--- a/gcc/ada/libgnarl/s-taprop__qnx.adb
+++ b/gcc/ada/libgnarl/s-taprop__qnx.adb
@@ -115,10 +115,10 @@ package body System.Task_Primitives.Operations is
Abort_Handler_Installed : Boolean := False;
-- True if a handler for the abort signal is installed
- type RTS_Lock_Ptr is not null access all RTS_Lock;
-
- function Init_Mutex (L : RTS_Lock_Ptr; Prio : Any_Priority) return int;
- -- Initialize the mutex L. If Ceiling_Support is True, then set the ceiling
+ function Initialize_Lock
+ (L : not null access RTS_Lock;
+ Prio : Any_Priority) return int;
+ -- Initialize the lock L. If Ceiling_Support is True, then set the ceiling
-- to Prio. Returns 0 for success, or ENOMEM for out-of-memory.
function Get_Policy (Prio : System.Any_Priority) return Character;
@@ -319,11 +319,19 @@ package body System.Task_Primitives.Operations is
function Self return Task_Id renames Specific.Self;
- ----------------
- -- Init_Mutex --
- ----------------
+ ---------------------
+ -- Initialize_Lock --
+ ---------------------
+
+ -- Note: mutexes and cond_variables needed per-task basis are initialized
+ -- in Initialize_TCB and the Storage_Error is handled. Other mutexes (such
+ -- as RTS_Lock, Memory_Lock...) used in RTS is initialized before any
+ -- status change of RTS. Therefore raising Storage_Error in the following
+ -- routines should be able to be handled safely.
- function Init_Mutex (L : RTS_Lock_Ptr; Prio : Any_Priority) return int
+ function Initialize_Lock
+ (L : not null access RTS_Lock;
+ Prio : Any_Priority) return int
is
Attributes : aliased pthread_mutexattr_t;
Result : int;
@@ -365,35 +373,26 @@ package body System.Task_Primitives.Operations is
pragma Assert (Result_2 = 0);
return Result;
- end Init_Mutex;
-
- ---------------------
- -- Initialize_Lock --
- ---------------------
-
- -- Note: mutexes and cond_variables needed per-task basis are initialized
- -- in Initialize_TCB and the Storage_Error is handled. Other mutexes (such
- -- as RTS_Lock, Memory_Lock...) used in RTS is initialized before any
- -- status change of RTS. Therefore raising Storage_Error in the following
- -- routines should be able to be handled safely.
+ end Initialize_Lock;
procedure Initialize_Lock
(Prio : System.Any_Priority;
L : not null access Lock)
is
begin
- if Init_Mutex (L.WO'Access, Prio) = ENOMEM then
+ if Initialize_Lock (L.WO'Access, Prio) = ENOMEM then
raise Storage_Error with "Failed to allocate a lock";
end if;
end Initialize_Lock;
procedure Initialize_Lock
- (L : not null access RTS_Lock; Level : Lock_Level)
+ (L : not null access RTS_Lock;
+ Level : Lock_Level)
is
pragma Unreferenced (Level);
begin
- if Init_Mutex (L.all'Access, Any_Priority'Last) = ENOMEM then
+ if Initialize_Lock (L, Any_Priority'Last) = ENOMEM then
raise Storage_Error with "Failed to allocate a lock";
end if;
end Initialize_Lock;
@@ -706,7 +705,8 @@ package body System.Task_Primitives.Operations is
Next_Serial_Number := Next_Serial_Number + 1;
pragma Assert (Next_Serial_Number /= 0);
- Result := Init_Mutex (Self_ID.Common.LL.L'Access, Any_Priority'Last);
+ Result :=
+ Initialize_Lock (Self_ID.Common.LL.L'Access, Any_Priority'Last);
pragma Assert (Result = 0);
if Result /= 0 then
diff --git a/gcc/ada/libgnarl/s-taprop__rtems.adb b/gcc/ada/libgnarl/s-taprop__rtems.adb
index 68a956e..b041592 100644
--- a/gcc/ada/libgnarl/s-taprop__rtems.adb
+++ b/gcc/ada/libgnarl/s-taprop__rtems.adb
@@ -202,6 +202,11 @@ package body System.Task_Primitives.Operations is
pragma Import (C,
GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
+ procedure Initialize_Lock
+ (L : not null access RTS_Lock;
+ Prio : System.Any_Priority);
+ -- Initialize an RTS_Lock with the specified priority
+
-------------------
-- Abort_Handler --
-------------------
@@ -329,11 +334,11 @@ package body System.Task_Primitives.Operations is
-- routines should be able to be handled safely.
procedure Initialize_Lock
- (Prio : System.Any_Priority;
- L : not null access Lock)
+ (L : not null access RTS_Lock;
+ Prio : System.Any_Priority)
is
Attributes : aliased pthread_mutexattr_t;
- Result : Interfaces.C.int;
+ Result : Interfaces.C.int;
begin
Result := pthread_mutexattr_init (Attributes'Access);
@@ -358,7 +363,7 @@ package body System.Task_Primitives.Operations is
pragma Assert (Result = 0);
end if;
- Result := pthread_mutex_init (L.WO'Access, Attributes'Access);
+ Result := pthread_mutex_init (L, Attributes'Access);
pragma Assert (Result = 0 or else Result = ENOMEM);
if Result = ENOMEM then
@@ -371,46 +376,20 @@ package body System.Task_Primitives.Operations is
end Initialize_Lock;
procedure Initialize_Lock
- (L : not null access RTS_Lock; Level : Lock_Level)
+ (Prio : System.Any_Priority;
+ L : not null access Lock)
is
- pragma Unreferenced (Level);
-
- Attributes : aliased pthread_mutexattr_t;
- Result : Interfaces.C.int;
-
begin
- Result := pthread_mutexattr_init (Attributes'Access);
- pragma Assert (Result = 0 or else Result = ENOMEM);
-
- if Result = ENOMEM then
- raise Storage_Error;
- end if;
-
- if Locking_Policy = 'C' then
- Result := pthread_mutexattr_setprotocol
- (Attributes'Access, PTHREAD_PRIO_PROTECT);
- pragma Assert (Result = 0);
-
- Result := pthread_mutexattr_setprioceiling
- (Attributes'Access, Interfaces.C.int (System.Any_Priority'Last));
- pragma Assert (Result = 0);
-
- elsif Locking_Policy = 'I' then
- Result := pthread_mutexattr_setprotocol
- (Attributes'Access, PTHREAD_PRIO_INHERIT);
- pragma Assert (Result = 0);
- end if;
-
- Result := pthread_mutex_init (L, Attributes'Access);
- pragma Assert (Result = 0 or else Result = ENOMEM);
-
- if Result = ENOMEM then
- Result := pthread_mutexattr_destroy (Attributes'Access);
- raise Storage_Error;
- end if;
+ Initialize_Lock (L.WO'Access, Prio);
+ end Initialize_Lock;
- Result := pthread_mutexattr_destroy (Attributes'Access);
- pragma Assert (Result = 0);
+ procedure Initialize_Lock
+ (L : not null access RTS_Lock;
+ Level : Lock_Level)
+ is
+ pragma Unreferenced (Level);
+ begin
+ Initialize_Lock (L, System.Any_Priority'Last);
end Initialize_Lock;
-------------------