annotate gcc/ada/libgnarl/s-tpopmo.adb @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ------------------------------------------------------------------------------
kono
parents:
diff changeset
2 -- --
kono
parents:
diff changeset
3 -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- SYSTEM.TASK_PRIMITIVES.OPERATIONS.MONOTONIC --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- B o d y --
kono
parents:
diff changeset
8 -- --
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
9 -- Copyright (C) 1992-2018, Free Software Foundation, Inc. --
111
kono
parents:
diff changeset
10 -- --
kono
parents:
diff changeset
11 -- GNARL is free software; you can redistribute it and/or modify it under --
kono
parents:
diff changeset
12 -- terms of the GNU General Public License as published by the Free Soft- --
kono
parents:
diff changeset
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
kono
parents:
diff changeset
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
kono
parents:
diff changeset
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
kono
parents:
diff changeset
16 -- or FITNESS FOR A PARTICULAR PURPOSE. --
kono
parents:
diff changeset
17 -- --
kono
parents:
diff changeset
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
kono
parents:
diff changeset
19 -- additional permissions described in the GCC Runtime Library Exception, --
kono
parents:
diff changeset
20 -- version 3.1, as published by the Free Software Foundation. --
kono
parents:
diff changeset
21 -- --
kono
parents:
diff changeset
22 -- You should have received a copy of the GNU General Public License and --
kono
parents:
diff changeset
23 -- a copy of the GCC Runtime Library Exception along with this program; --
kono
parents:
diff changeset
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
kono
parents:
diff changeset
25 -- <http://www.gnu.org/licenses/>. --
kono
parents:
diff changeset
26 -- --
kono
parents:
diff changeset
27 -- GNARL was developed by the GNARL team at Florida State University. --
kono
parents:
diff changeset
28 -- Extensive contributions were provided by Ada Core Technologies, Inc. --
kono
parents:
diff changeset
29 -- --
kono
parents:
diff changeset
30 ------------------------------------------------------------------------------
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 -- This is the Monotonic version of this package for Posix and Linux targets.
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 separate (System.Task_Primitives.Operations)
kono
parents:
diff changeset
35 package body Monotonic is
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 -----------------------
kono
parents:
diff changeset
38 -- Local Subprograms --
kono
parents:
diff changeset
39 -----------------------
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 procedure Compute_Deadline
kono
parents:
diff changeset
42 (Time : Duration;
kono
parents:
diff changeset
43 Mode : ST.Delay_Modes;
kono
parents:
diff changeset
44 Check_Time : out Duration;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
45 Abs_Time : out Duration);
111
kono
parents:
diff changeset
46 -- Helper for Timed_Sleep and Timed_Delay: given a deadline specified by
kono
parents:
diff changeset
47 -- Time and Mode, compute the current clock reading (Check_Time), and the
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
48 -- target absolute and relative clock readings (Abs_Time). The
111
kono
parents:
diff changeset
49 -- epoch for Time depends on Mode; the epoch for Check_Time and Abs_Time
kono
parents:
diff changeset
50 -- is always that of CLOCK_RT_Ada.
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 ---------------------
kono
parents:
diff changeset
53 -- Monotonic_Clock --
kono
parents:
diff changeset
54 ---------------------
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 function Monotonic_Clock return Duration is
kono
parents:
diff changeset
57 TS : aliased timespec;
kono
parents:
diff changeset
58 Result : Interfaces.C.int;
kono
parents:
diff changeset
59 begin
kono
parents:
diff changeset
60 Result := clock_gettime
kono
parents:
diff changeset
61 (clock_id => OSC.CLOCK_RT_Ada, tp => TS'Unchecked_Access);
kono
parents:
diff changeset
62 pragma Assert (Result = 0);
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 return To_Duration (TS);
kono
parents:
diff changeset
65 end Monotonic_Clock;
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 -------------------
kono
parents:
diff changeset
68 -- RT_Resolution --
kono
parents:
diff changeset
69 -------------------
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 function RT_Resolution return Duration is
kono
parents:
diff changeset
72 TS : aliased timespec;
kono
parents:
diff changeset
73 Result : Interfaces.C.int;
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 begin
kono
parents:
diff changeset
76 Result := clock_getres (OSC.CLOCK_REALTIME, TS'Unchecked_Access);
kono
parents:
diff changeset
77 pragma Assert (Result = 0);
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 return To_Duration (TS);
kono
parents:
diff changeset
80 end RT_Resolution;
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 ----------------------
kono
parents:
diff changeset
83 -- Compute_Deadline --
kono
parents:
diff changeset
84 ----------------------
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 procedure Compute_Deadline
kono
parents:
diff changeset
87 (Time : Duration;
kono
parents:
diff changeset
88 Mode : ST.Delay_Modes;
kono
parents:
diff changeset
89 Check_Time : out Duration;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
90 Abs_Time : out Duration)
111
kono
parents:
diff changeset
91 is
kono
parents:
diff changeset
92 begin
kono
parents:
diff changeset
93 Check_Time := Monotonic_Clock;
kono
parents:
diff changeset
94
kono
parents:
diff changeset
95 -- Relative deadline
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 if Mode = Relative then
kono
parents:
diff changeset
98 Abs_Time := Duration'Min (Time, Max_Sensible_Delay) + Check_Time;
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 pragma Warnings (Off);
kono
parents:
diff changeset
101 -- Comparison "OSC.CLOCK_RT_Ada = OSC.CLOCK_REALTIME" is compile
kono
parents:
diff changeset
102 -- time known.
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 -- Absolute deadline specified using the tasking clock (CLOCK_RT_Ada)
kono
parents:
diff changeset
105
kono
parents:
diff changeset
106 elsif Mode = Absolute_RT
kono
parents:
diff changeset
107 or else OSC.CLOCK_RT_Ada = OSC.CLOCK_REALTIME
kono
parents:
diff changeset
108 then
kono
parents:
diff changeset
109 pragma Warnings (On);
kono
parents:
diff changeset
110 Abs_Time := Duration'Min (Check_Time + Max_Sensible_Delay, Time);
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 -- Absolute deadline specified using the calendar clock, in the
kono
parents:
diff changeset
113 -- case where it is not the same as the tasking clock: compensate for
kono
parents:
diff changeset
114 -- difference between clock epochs (Base_Time - Base_Cal_Time).
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 else
kono
parents:
diff changeset
117 declare
kono
parents:
diff changeset
118 Cal_Check_Time : constant Duration := OS_Primitives.Clock;
kono
parents:
diff changeset
119 RT_Time : constant Duration :=
kono
parents:
diff changeset
120 Time + Check_Time - Cal_Check_Time;
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 begin
kono
parents:
diff changeset
123 Abs_Time :=
kono
parents:
diff changeset
124 Duration'Min (Check_Time + Max_Sensible_Delay, RT_Time);
kono
parents:
diff changeset
125
kono
parents:
diff changeset
126 end;
kono
parents:
diff changeset
127 end if;
kono
parents:
diff changeset
128 end Compute_Deadline;
kono
parents:
diff changeset
129
kono
parents:
diff changeset
130 -----------------
kono
parents:
diff changeset
131 -- Timed_Sleep --
kono
parents:
diff changeset
132 -----------------
kono
parents:
diff changeset
133
kono
parents:
diff changeset
134 -- This is for use within the run-time system, so abort is
kono
parents:
diff changeset
135 -- assumed to be already deferred, and the caller should be
kono
parents:
diff changeset
136 -- holding its own ATCB lock.
kono
parents:
diff changeset
137
kono
parents:
diff changeset
138 procedure Timed_Sleep
kono
parents:
diff changeset
139 (Self_ID : ST.Task_Id;
kono
parents:
diff changeset
140 Time : Duration;
kono
parents:
diff changeset
141 Mode : ST.Delay_Modes;
kono
parents:
diff changeset
142 Reason : System.Tasking.Task_States;
kono
parents:
diff changeset
143 Timedout : out Boolean;
kono
parents:
diff changeset
144 Yielded : out Boolean)
kono
parents:
diff changeset
145 is
kono
parents:
diff changeset
146 pragma Unreferenced (Reason);
kono
parents:
diff changeset
147
kono
parents:
diff changeset
148 Base_Time : Duration;
kono
parents:
diff changeset
149 Check_Time : Duration;
kono
parents:
diff changeset
150 Abs_Time : Duration;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
151 P_Abs_Time : Duration;
111
kono
parents:
diff changeset
152
kono
parents:
diff changeset
153 Request : aliased timespec;
kono
parents:
diff changeset
154 Result : Interfaces.C.int;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
155 Exit_Outer : Boolean := False;
111
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157 begin
kono
parents:
diff changeset
158 Timedout := True;
kono
parents:
diff changeset
159 Yielded := False;
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 Compute_Deadline
kono
parents:
diff changeset
162 (Time => Time,
kono
parents:
diff changeset
163 Mode => Mode,
kono
parents:
diff changeset
164 Check_Time => Check_Time,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
165 Abs_Time => Abs_Time);
111
kono
parents:
diff changeset
166 Base_Time := Check_Time;
kono
parents:
diff changeset
167
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
168 -- To keep a sensible Max_Sensible_Delay on a target whose system
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
169 -- maximum is less than sensible, we split the delay into manageable
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
170 -- chunks of time less than or equal to the Max_System_Delay.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
171
111
kono
parents:
diff changeset
172 if Abs_Time > Check_Time then
kono
parents:
diff changeset
173
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
174 Outer : loop
111
kono
parents:
diff changeset
175
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
176 pragma Warnings (Off, "condition is always *");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
177 if Max_System_Delay < Max_Sensible_Delay and then
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
178 Abs_Time > Check_Time + Max_System_Delay
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
179 then
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
180 P_Abs_Time := Check_Time + Max_System_Delay;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
181 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
182 P_Abs_Time := Abs_Time;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
183 Exit_Outer := True;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
184 end if;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
185 pragma Warnings (On);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
186
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
187 Request := To_Timespec (P_Abs_Time);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
188
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
189 Inner : loop
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
190 exit Outer
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
191 when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
111
kono
parents:
diff changeset
192
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
193 Result :=
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
194 pthread_cond_timedwait
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
195 (cond => Self_ID.Common.LL.CV'Access,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
196 mutex => (if Single_Lock
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
197 then Single_RTS_Lock'Access
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
198 else Self_ID.Common.LL.L'Access),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
199 abstime => Request'Access);
111
kono
parents:
diff changeset
200
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
201 case Result is
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
202 when 0 | EINTR =>
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
203 -- Somebody may have called Wakeup for us
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
204 Timedout := False;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
205 exit Outer;
111
kono
parents:
diff changeset
206
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
207 when ETIMEDOUT =>
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
208 exit Outer when Exit_Outer;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
209 Check_Time := Monotonic_Clock;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
210 exit Inner;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
211
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
212 when others =>
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
213 pragma Assert (False);
111
kono
parents:
diff changeset
214
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
215 end case;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
216
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
217 exit Outer
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
218 when Abs_Time <= Check_Time or else Check_Time < Base_Time;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
219
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
220 end loop Inner;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
221 end loop Outer;
111
kono
parents:
diff changeset
222 end if;
kono
parents:
diff changeset
223 end Timed_Sleep;
kono
parents:
diff changeset
224
kono
parents:
diff changeset
225 -----------------
kono
parents:
diff changeset
226 -- Timed_Delay --
kono
parents:
diff changeset
227 -----------------
kono
parents:
diff changeset
228
kono
parents:
diff changeset
229 -- This is for use in implementing delay statements, so we assume the
kono
parents:
diff changeset
230 -- caller is abort-deferred but is holding no locks.
kono
parents:
diff changeset
231
kono
parents:
diff changeset
232 procedure Timed_Delay
kono
parents:
diff changeset
233 (Self_ID : ST.Task_Id;
kono
parents:
diff changeset
234 Time : Duration;
kono
parents:
diff changeset
235 Mode : ST.Delay_Modes)
kono
parents:
diff changeset
236 is
kono
parents:
diff changeset
237 Base_Time : Duration;
kono
parents:
diff changeset
238 Check_Time : Duration;
kono
parents:
diff changeset
239 Abs_Time : Duration;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
240 P_Abs_Time : Duration;
111
kono
parents:
diff changeset
241 Request : aliased timespec;
kono
parents:
diff changeset
242
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
243 Result : Interfaces.C.int;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
244 Exit_Outer : Boolean := False;
111
kono
parents:
diff changeset
245
kono
parents:
diff changeset
246 begin
kono
parents:
diff changeset
247 if Single_Lock then
kono
parents:
diff changeset
248 Lock_RTS;
kono
parents:
diff changeset
249 end if;
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251 Write_Lock (Self_ID);
kono
parents:
diff changeset
252
kono
parents:
diff changeset
253 Compute_Deadline
kono
parents:
diff changeset
254 (Time => Time,
kono
parents:
diff changeset
255 Mode => Mode,
kono
parents:
diff changeset
256 Check_Time => Check_Time,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
257 Abs_Time => Abs_Time);
111
kono
parents:
diff changeset
258 Base_Time := Check_Time;
kono
parents:
diff changeset
259
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
260 -- To keep a sensible Max_Sensible_Delay on a target whose system
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
261 -- maximum is less than sensible, we split the delay into manageable
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
262 -- chunks of time less than or equal to the Max_System_Delay.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
263
111
kono
parents:
diff changeset
264 if Abs_Time > Check_Time then
kono
parents:
diff changeset
265 Self_ID.Common.State := Delay_Sleep;
kono
parents:
diff changeset
266
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
267 Outer : loop
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
268
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
269 pragma Warnings (Off, "condition is always *");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
270 if Max_System_Delay < Max_Sensible_Delay and then
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
271 Abs_Time > Check_Time + Max_System_Delay
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
272 then
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
273 P_Abs_Time := Check_Time + Max_System_Delay;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
274 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
275 P_Abs_Time := Abs_Time;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
276 Exit_Outer := True;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
277 end if;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
278 pragma Warnings (On);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
279
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
280 Request := To_Timespec (P_Abs_Time);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
281
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
282 Inner : loop
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
283 exit Outer
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
284 when Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level;
111
kono
parents:
diff changeset
285
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
286 Result :=
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
287 pthread_cond_timedwait
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
288 (cond => Self_ID.Common.LL.CV'Access,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
289 mutex => (if Single_Lock
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
290 then Single_RTS_Lock'Access
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
291 else Self_ID.Common.LL.L'Access),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
292 abstime => Request'Access);
111
kono
parents:
diff changeset
293
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
294 case Result is
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
295 when ETIMEDOUT =>
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
296 exit Outer when Exit_Outer;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
297 Check_Time := Monotonic_Clock;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
298 exit Inner;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
299
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
300 when 0 | EINTR => null;
111
kono
parents:
diff changeset
301
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
302 when others =>
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
303 pragma Assert (False);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
304
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
305 end case;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
306
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
307 exit Outer
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
308 when Abs_Time <= Check_Time or else Check_Time < Base_Time;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
309
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
310 end loop Inner;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
311 end loop Outer;
111
kono
parents:
diff changeset
312
kono
parents:
diff changeset
313 Self_ID.Common.State := Runnable;
kono
parents:
diff changeset
314 end if;
kono
parents:
diff changeset
315
kono
parents:
diff changeset
316 Unlock (Self_ID);
kono
parents:
diff changeset
317
kono
parents:
diff changeset
318 if Single_Lock then
kono
parents:
diff changeset
319 Unlock_RTS;
kono
parents:
diff changeset
320 end if;
kono
parents:
diff changeset
321
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
322 pragma Unreferenced (Result);
111
kono
parents:
diff changeset
323 Result := sched_yield;
kono
parents:
diff changeset
324 end Timed_Delay;
kono
parents:
diff changeset
325
kono
parents:
diff changeset
326 end Monotonic;