]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Fix ATC with timed delay from Ada.Real_Time
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 27 Sep 2024 07:36:17 +0000 (09:36 +0200)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Fri, 25 Oct 2024 09:09:02 +0000 (11:09 +0200)
An Asynchronous Transfer of Control blocks with a timed delay that is
computed by means of the Ada.Real_Time unit (instead of the default
Ada.Calendar unit) because of a missing abort deferral in the unit.

gcc/ada/ChangeLog:

PR ada/43485
* libgnarl/a-retide.adb: Add with clause for System.Soft_Links.
(Delay_Until): Defer and undefer abort around the call to the
Timed_Delay routine of System.Task_Primitives.Operations.

gcc/ada/libgnarl/a-retide.adb

index 80e3d31ed17d380ccecd7a72a3f320e4bb63a003..d7cac0f2124f59a4d211f97e1d960f783450ee33 100644 (file)
 
 with Ada.Exceptions;
 
+with System.Soft_Links;
 with System.Tasking;
 with System.Task_Primitives.Operations;
 
 package body Ada.Real_Time.Delays is
 
+   package SSL  renames System.Soft_Links;
    package STPO renames System.Task_Primitives.Operations;
 
    ----------------
@@ -62,7 +64,9 @@ package body Ada.Real_Time.Delays is
          Ada.Exceptions.Raise_Exception
            (Program_Error'Identity, "potentially blocking operation");
       else
+         SSL.Abort_Defer.all;
          STPO.Timed_Delay (Self_Id, To_Duration (T), Absolute_RT);
+         SSL.Abort_Undefer.all;
       end if;
    end Delay_Until;