CVS difference for ai05s/ai05-0045-1.txt
--- ai05s/ai05-0045-1.txt 2007/08/07 01:16:17 1.4
+++ ai05s/ai05-0045-1.txt 2007/12/13 04:39:36 1.5
@@ -1,5 +1,6 @@
-!standard 9.2(6) 07-08-06 AI05-0045-1/03
+!standard 9.2(6) 07-11-28 AI05-0045-1/04
!class binding interpretation 07-04-04
+!status ARG Approved 9-0-0 06-11-10
!status work item 07-04-04
!status received 07-04-02
!priority Medium
@@ -35,31 +36,28 @@
Replace 9.2(6) by:
-If a return statement is left such that the return object is not returned
-to the caller, any task that was created as part or coextension of the
-return object immediately becomes terminated and is never activated
-[irregardless of where it would have been activated]. Otherwise, if a master
-that directly encloses the point where the activation of a task T would be
-initiated begins finalization before the activation of T is initiated, T
+If the master that directly encloses the point where the activation of a task T
+would be initiated, completes before the activation of T is initiated, T becomes
+terminated and is never activated. Furthermore, if a return statement is left
+such that the return object is not returned to the caller, any task that was
+created as a part of the return object or one of its coextensions immediately
becomes terminated and is never activated.
- AARM Notes: The first case can happen with an exception being raised in a return
+ AARM Notes: The first case can only happen if the activation point of T is not
+ reached due to an exception being raised or a task or statement being aborted.
+ Note that this is exclusive; if the master is being finalized, we're already
+ past the activation point.
+
+ The second case can happen with an exception being raised in a return
statement, by an exit or goto from an extended_return_statement, or by a
return statement being aborted. Any tasks created for the return object of
such a return statement are never activated.
-
- The second case can only happen if the activation point of T is not reached
- due to an exception being raised or the task being aborted. Note that this is
- exclusive; if the master is being finalized, we're already past the activation
- point and since Ada doesn't have any restart semantics, we can never get there.
End AARM Notes.
-[Editor's note: The square brackets here mark redundant text.]
-
!discussion
What is important here is what happens if the master that directly encloses
-the activation point of any unactivated tasks is finalized. We don't care why the
+the activation point of any unactivated tasks is completed. We don't care why the
tasks were never activated or where they were created. Thus, the original wording
of 9.2(6) says too much. It also has a race condition, in that if the task is
aborted when it reaches the activation point but before the tasks actually are
@@ -69,7 +67,7 @@
being terminated on creation would meet the requirements of this rule. Thus, the value
of T'Terminated is not well-defined for such tasks. That seems bad.
-Because of all of these reasons, we've rewritten the rule in terms of finalization of
+Because of all of these reasons, we've rewritten the rule in terms of completion of
a master rather than "reaching the point of activation".
While the most critical point is when the master of the tasks begins to finalize (because
@@ -93,12 +91,11 @@
initiate the activations (due to an abort or the raising of an exception), the
newly created tasks become terminated and are never activated.
@dby
-If a return statement is left such that the return object is not returned
-to the caller, any task that was created as part or coextension of the
-return object immediately becomes terminated and is never activated
-irregardless of where it would have been activated. Otherwise, if a master
-that directly encloses the point where the activation of a task T would be
-initiated begins finalization before the activation of T is initiated, T
+If the master that directly encloses the point where the activation of a task @i<T>
+would be initiated, completes before the activation of @i<T> is initiated, @i<T> becomes
+terminated and is never activated. Furthermore, if a return statement is left
+such that the return object is not returned to the caller, any task that was
+created as a part of the return object or one of its coextensions immediately
becomes terminated and is never activated.
!ACATS test
Questions? Ask the ACAA Technical Agent