- (1)
- An abort_statement causes one or more tasks to become abnormal, thus
preventing any further interaction with such tasks. The completion of the
triggering_statement of an asynchronous_select causes a sequence_of_statements to be aborted.
(2)
abort_statement ::= abort task_name {, task_name};
Name Resolution Rules
- (3)
- Each task_name is expected to be of any task type; they need not all be
of the same task type.
Dynamic Semantics
- (4)
- For the execution of an abort_statement, the given task_names are
evaluated in an arbitrary order. Each named task is then aborted, which
consists of making the task abnormal and aborting the execution of the
corresponding task_body, unless it is already completed.
- (5)
- When the execution of a construct is aborted (including that of a task_body or of a sequence_of_statements), the execution of every construct
included within the aborted execution is also aborted, except for executions
included within the execution of an abort-deferred operation; the execution
of an abort-deferred operation continues to completion without being affected
by the abort; the following are the abort-deferred operations:
- (6)
- (7)
- waiting for an entry call to complete (after having initiated the
attempt to cancel it -- see below);
- (8)
- waiting for the termination of dependent tasks;
- (9)
- the execution of an Initialize procedure as the last step of the
default initialization of a controlled object;
- (10)
- the execution of a Finalize procedure as part of the finalization
of a controlled object;
- (11)
- an assignment operation to an object with a controlled part.
- (12)
- The last three of these are discussed further in 7.6.
- (13)
- When a master is aborted, all tasks that depend on that master are
aborted.
- (14)
- The order in which tasks become abnormal as the result of an abort_statement or the abort of a sequence_of_statements is not specified by the
language.
- (15)
- If the execution of an entry call is aborted, an immediate attempt is made
to cancel the entry call (see 9.5.3). If the execution
of a construct is aborted at a time when the execution is blocked, other than
for an entry call, at a point that is outside the execution of an abort-deferred
operation, then the execution of the construct completes immediately. For
an abort due to an abort_statement, these immediate effects occur before the
execution of the abort_statement completes. Other than for these immediate
cases, the execution of a construct that is aborted does not necessarily complete
before the abort_statement completes. However, the execution of the aborted
construct completes no later than its next abort completion point (if any)
that occurs outside of an abort-deferred operation; the following are abort
completion points for an execution:
- (16)
- the point where the execution initiates the activation of another
task;
- (17)
- the end of the activation of a task;
- (18)
- the start or end of the execution of an entry call, accept_statement, delay_statement, or abort_statement;
- (19)
- the start of the execution of a select_statement, or of the
sequence_of_statements of an exception_handler.
Bounded (Run-Time) Errors
- (20)
- An attempt to execute an asynchronous_select as part of the execution of
an abort-deferred operation is a bounded error. Similarly, an attempt to
create a task that depends on a master that is included entirely within the
execution of an abort-deferred operation is a bounded error. In both cases,
Program_Error is raised if the error is detected by the implementation;
otherwise the operations proceed as they would outside an abort-deferred
operation, except that an abort of the abortable_part or the created task
might or might not have an effect.
Erroneous Execution
- (21)
- If an assignment operation completes prematurely due to an abort, the assignment
is said to be disrupted; the target of the assignment or its parts can become
abnormal, and certain subsequent uses of the object can be erroneous, as explained
in 13.9.1.
-
- (22)
(38) An abort_statement should be used only in situations requiring
unconditional termination.
- (23)
(39) A task is allowed to abort any task it can name, including itself.
- (24)
(40) Additional requirements associated with abort are given in
D.6, ``Preemptive Abort''.
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12