]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/ada/libgnarl/s-tadeca.adb
Update copyright years.
[thirdparty/gcc.git] / gcc / ada / libgnarl / s-tadeca.adb
CommitLineData
cacbc350
RK
1------------------------------------------------------------------------------
2-- --
3084fecd 3-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
cacbc350 4-- --
15f6d6e7 5-- SYSTEM.TASKING.ASYNC_DELAYS.ENQUEUE_CALENDAR --
cacbc350
RK
6-- --
7-- B o d y --
8-- --
06c565cc 9-- Copyright (C) 1998-2024, Free Software Foundation, Inc. --
cacbc350
RK
10-- --
11-- GNARL is free software; you can redistribute it and/or modify it under --
12-- terms of the GNU General Public License as published by the Free Soft- --
748086b7
JJ
13-- ware Foundation; either version 3, or (at your option) any later ver- --
14-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
cacbc350 15-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
748086b7
JJ
16-- or FITNESS FOR A PARTICULAR PURPOSE. --
17-- --
18-- As a special exception under Section 7 of GPL version 3, you are granted --
19-- additional permissions described in the GCC Runtime Library Exception, --
20-- version 3.1, as published by the Free Software Foundation. --
21-- --
22-- You should have received a copy of the GNU General Public License and --
23-- a copy of the GCC Runtime Library Exception along with this program; --
24-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
25-- <http://www.gnu.org/licenses/>. --
cacbc350 26-- --
fbf5a39b
AC
27-- GNARL was developed by the GNARL team at Florida State University. --
28-- Extensive contributions were provided by Ada Core Technologies, Inc. --
cacbc350
RK
29-- --
30------------------------------------------------------------------------------
31
32with Ada.Calendar.Delays;
90b51aaf 33
2838fa93
AC
34with System.OS_Constants;
35with System.OS_Primitives;
cacbc350
RK
36with System.Task_Primitives.Operations;
37with System.Tasking.Initialization;
38
39function System.Tasking.Async_Delays.Enqueue_Calendar
90b51aaf
AC
40 (T : Ada.Calendar.Time;
41 D : Delay_Block_Access) return Boolean
cacbc350
RK
42is
43 use type Ada.Calendar.Time;
2838fa93
AC
44
45 package SOSC renames System.OS_Constants;
46 package STPO renames System.Task_Primitives.Operations;
47
48 RT_T : Duration := Ada.Calendar.Delays.To_Duration (T);
49
cacbc350
RK
50begin
51 if T <= Ada.Calendar.Clock then
52 D.Timed_Out := True;
53 System.Task_Primitives.Operations.Yield;
54 return False;
55 end if;
56
2838fa93 57 -- T is expressed as a duration elapsed since the UNIX epoch, whereas
818b578d 58 -- Time_Enqueue expects duration elapsed since the epoch of the Ada real-
90b51aaf 59 -- time clock: compensate if necessary.
2838fa93 60
2838fa93 61 -- Comparison "SOSC.CLOCK_RT_Ada = SOSC.CLOCK_REALTIME" is compile
90b51aaf
AC
62 -- time known, so turn warnings off.
63
64 pragma Warnings (Off);
2838fa93
AC
65
66 if SOSC.CLOCK_RT_Ada /= SOSC.CLOCK_REALTIME then
67 pragma Warnings (On);
68
e3d9f448 69 RT_T := RT_T - OS_Primitives.Clock + STPO.Monotonic_Clock;
2838fa93
AC
70 end if;
71
cacbc350
RK
72 System.Tasking.Initialization.Defer_Abort
73 (System.Task_Primitives.Operations.Self);
2838fa93 74 Time_Enqueue (RT_T, D);
cacbc350
RK
75 return True;
76end System.Tasking.Async_Delays.Enqueue_Calendar;