Contents Index Search Previous Next
9.8 Abort of a Task - Abort of a Sequence of Statements
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.
Syntax
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
Contents Index Search Previous Next Legal