s-tassta.adb (Create_Task): Move the code in charge of resetting the deferral level...
authorJose Ruiz <ruiz@adacore.com>
Tue, 15 Nov 2005 13:53:05 +0000 (14:53 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 15 Nov 2005 13:53:05 +0000 (14:53 +0100)
2005-11-14  Jose Ruiz  <ruiz@adacore.com>

* s-tassta.adb (Create_Task): Move the code in charge of resetting the
deferral level, when abort is not allowed, to a later stage (the
Task_Wrapper).
(Task_Wrapper): If Abort is not allowed, reset the deferral level since
it will not get changed by the generated code. It was previously done
in Create_Task.

From-SVN: r106960

gcc/ada/s-tassta.adb

index 1ac7edb2dd06436f73844d9095774c4fd4b4b1e1..54f92ebcde82abc3648bb5a00f675ff84f59bf39 100644 (file)
@@ -617,16 +617,6 @@ package body System.Tasking.Stages is
            (Storage_Error'Identity, "Failed to initialize task");
       end if;
 
-      if not System.Restrictions.Abort_Allowed then
-
-         --  If Abort is not allowed, reset the deferral level since it will
-         --  not get changed by the generated code. Keeping a default value
-         --  of one would prevent some operations (e.g. select or delay) to
-         --  proceed successfully.
-
-         T.Deferral_Level := 0;
-      end if;
-
       T.Master_of_Task := Master;
       T.Master_Within := T.Master_of_Task + 1;
 
@@ -950,6 +940,16 @@ package body System.Tasking.Stages is
       Lock_RTS;
       Unlock_RTS;
 
+      if not System.Restrictions.Abort_Allowed then
+
+         --  If Abort is not allowed, reset the deferral level since it will
+         --  not get changed by the generated code. Keeping a default value
+         --  of one would prevent some operations (e.g. select or delay) to
+         --  proceed successfully.
+
+         Self_ID.Deferral_Level := 0;
+      end if;
+
       begin
          --  We are separating the following portion of the code in order to
          --  place the exception handlers in a different block. In this way,