Commit 31eee11b by Arnaud Charlet

s-tassta.adb (Create_Task): Take into account tasks created by foreign threads.

	* s-tassta.adb (Create_Task): Take into account tasks created by
	foreign threads.
	Code clean up: use constants instead of hard coded values.

From-SVN: r130865
parent e4b55122
...@@ -614,7 +614,18 @@ package body System.Tasking.Stages is ...@@ -614,7 +614,18 @@ package body System.Tasking.Stages is
(Storage_Error'Identity, "Failed to initialize task"); (Storage_Error'Identity, "Failed to initialize task");
end if; end if;
T.Master_of_Task := Master; if Master = Foreign_Task_Level + 2 then
-- This should not happen, except when a foreign task creates non
-- library-level Ada tasks. In this case, we pretend the master is
-- a regular library level task, otherwise the run-time will get
-- confused when waiting for these tasks to terminate.
T.Master_of_Task := Library_Task_Level;
else
T.Master_of_Task := Master;
end if;
T.Master_Within := T.Master_of_Task + 1; T.Master_Within := T.Master_of_Task + 1;
for L in T.Entry_Calls'Range loop for L in T.Entry_Calls'Range loop
...@@ -1276,7 +1287,7 @@ package body System.Tasking.Stages is ...@@ -1276,7 +1287,7 @@ package body System.Tasking.Stages is
-- Check if the current task is an independent task If so, decrement -- Check if the current task is an independent task If so, decrement
-- the Independent_Task_Count value. -- the Independent_Task_Count value.
if Master_of_Task = 2 then if Master_of_Task = Independent_Task_Level then
if Single_Lock then if Single_Lock then
Utilities.Independent_Task_Count := Utilities.Independent_Task_Count :=
Utilities.Independent_Task_Count - 1; Utilities.Independent_Task_Count - 1;
...@@ -1772,7 +1783,7 @@ package body System.Tasking.Stages is ...@@ -1772,7 +1783,7 @@ package body System.Tasking.Stages is
if (T.Common.Parent /= null if (T.Common.Parent /= null
and then T.Common.Parent.Common.Parent /= null) and then T.Common.Parent.Common.Parent /= null)
or else T.Master_of_Task > 3 or else T.Master_of_Task > Library_Task_Level
then then
Initialization.Task_Lock (Self_ID); Initialization.Task_Lock (Self_ID);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment