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
This commit is contained in:
parent
e4b551223d
commit
31eee11b7c
|
@ -614,7 +614,18 @@ package body System.Tasking.Stages is
|
|||
(Storage_Error'Identity, "Failed to initialize task");
|
||||
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;
|
||||
|
||||
for L in T.Entry_Calls'Range loop
|
||||
|
@ -1276,7 +1287,7 @@ package body System.Tasking.Stages is
|
|||
-- Check if the current task is an independent task If so, decrement
|
||||
-- the Independent_Task_Count value.
|
||||
|
||||
if Master_of_Task = 2 then
|
||||
if Master_of_Task = Independent_Task_Level then
|
||||
if Single_Lock then
|
||||
Utilities.Independent_Task_Count :=
|
||||
Utilities.Independent_Task_Count - 1;
|
||||
|
@ -1772,7 +1783,7 @@ package body System.Tasking.Stages is
|
|||
|
||||
if (T.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
|
||||
Initialization.Task_Lock (Self_ID);
|
||||
|
||||
|
|
Loading…
Reference in New Issue