[Ada] VxWorks: call s-tpopsp.Self only when needed
authorJerome Lambourg <lambourg@adacore.com>
Mon, 12 Aug 2019 08:59:08 +0000 (08:59 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 12 Aug 2019 08:59:08 +0000 (08:59 +0000)
2019-08-12  Jerome Lambourg  <lambourg@adacore.com>

gcc/ada/

* libgnarl/s-taprop__vxworks.adb (Abort_Handler): Only call
s-tpopsp.Self when actually needed.

From-SVN: r274283

gcc/ada/ChangeLog
gcc/ada/libgnarl/s-taprop__vxworks.adb

index df19f1b..b656a02 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-12  Jerome Lambourg  <lambourg@adacore.com>
+
+       * libgnarl/s-taprop__vxworks.adb (Abort_Handler): Only call
+       s-tpopsp.Self when actually needed.
+
 2019-08-12  Eric Botcazou  <ebotcazou@adacore.com>
 
        * exp_ch4.adb (Discrete_Range_Check): Return if checks are
index 80a7290..6ef0a9b 100644 (file)
@@ -192,7 +192,10 @@ package body System.Task_Primitives.Operations is
    procedure Abort_Handler (signo : Signal) is
       pragma Unreferenced (signo);
 
-      Self_ID        : constant Task_Id := Self;
+      --  Do not call Self at this point as we're in a signal handler
+      --  and it may not be available, in particular on targets where we
+      --  support ZCX and where we don't do anything here anyway.
+      Self_ID        : Task_Id;
       Old_Set        : aliased sigset_t;
       Unblocked_Mask : aliased sigset_t;
       Result         : int;
@@ -208,6 +211,8 @@ package body System.Task_Primitives.Operations is
          return;
       end if;
 
+      Self_ID := Self;
+
       if Self_ID.Deferral_Level = 0
         and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level
         and then not Self_ID.Aborting