This scenario describes the behavior of an application that contains
a C and Fortran routine.
In this scenario, a Fortran main
routine invokes a C subroutine.
An exception occurs in the C subroutine.
Figure 1. Stack contents
when the exception occurs in C
The actions taken follow the three Language Environment condition
handling steps: enablement, condition, and termination imminent.
- In the enablement step, C determines
whether the exception in the C routine
should be enabled and treated as a condition. If any of the following
are true, the exception is ignored, and processing continues at the
next sequential instruction after where the exception occurred:
If you did none of these things, the condition is enabled and
processed as a condition.
- If a user-written condition handler has been registered using
CEEHDLR on the C stack
frame, it is given control. If it issues a resume, with or without
moving the resume cursor, the condition handling step ends. Processing
continues in the routine to which the resume cursor points.
In
this example, there is not a user-written condition handler registered
for the condition, so the condition is percolated.
- The C global
error table is now examined for signal handlers that have been registered
for the condition.
If there is a signal handler registered for
the condition, it is given control. If it issues a resume or a call
to longjmp(), the condition handling step ends. Processing
resumes in the routine to which the resume cursor points.
In
this example no C signal
handler is registered for the condition, so the condition is percolated.
- The condition is still unhandled. If C does
not recognize the condition, or if the C default
action (listed in Table 2)
is to terminate, the condition is percolated.
- There is no user-written condition handler on the Fortran stack
frame (because CEEHDLR cannot be called from a Fortran routine),
and the condition is percolated.
- If the condition is of severity 0 or 1, the Language Environment default
actions take place, as described in Table 1.
- If the condition is of severity 2 or above, Language Environment default
action is to promote the condition to T_I_U (Termination Imminent
due to an Unhandled condition) and redrive the stack. Condition handling
now enters the termination imminent step.
- If, on the second pass of the stack, no condition handler moves
the resume cursor and issues a resume, Language Environment terminates
the thread.