Calling an exit routine or routines

The CALL request is done by the exit provider; it can also be done by other applications. At a CALL request, the system passes control to the active exit routine or routines that are associated with the exit. If multiple exit routines are associated with the exit, control passes to one routine after another, in no predictable order. If you require that the exit routines run in a particular order, you must do the routing. The CALL request does not include the name of an exit routine or routines; the system knows which routines are associated with the exit. The scenario of calling the exits that are associated with the exit EX1 would look like this:
exit provider setup
   _____
   _____
   _____

   CSVDYNEX REQUEST=DEFINE,EXITNAME==CL16'EX1'...
   _____

exit provider processing
   _____

   CSVDYNEX REQUEST=CALL,EXITNAME==CL16'EX1'...  routine or routine
   _____                                    associated with the
                                            exit named EX1

Specifying the CALL request is somewhat determined by the definition of the exit. For example, you cannot issue a call specifying that the routines get FASTPATH processing if the exit is not enabled for FASTPATH processing. In other words, you cannot specify FASTPATH=YES on the CALL request if the exit was defined with FASTPATH=NO. However, if the exit was defined with FASTPATH=YES, you can specify either FASTPATH=YES or FASTPATH=NO on the CALL request. There is no requirement that all CALL requests be of the same FASTPATH type.

Questions you need to ask when you call an exit are:
  • How is the system to return information to the caller?
    One of the decisions you make on the CALL request is what return information the system returns. Does it return the return information from all exit routines or from one exit routine. Parameters on the CALL request are RETINFO, RETAREA, and RETLEN.
    • RETINFO specifies whether the caller receives return information from the exit routine with the LOWEST return code (RETINFO=LOWEST), from the exit routine with the HIGHEST return code (RETINFO=HIGHEST), from all exit routines (RETINFO=ALL), or from the last exit routine to run (RETINFO=LAST).
    • RETAREA and RETLEN tell the system where the return area is and how large it is.

    If you specify LOWEST or HIGHEST on RETINFO, you can also specify related parameters on the DEFINE request. For more information about this topic, see Returning information from multiple exit routines.

  • Is the CALL request for the exit to have FASTPATH processing?

    To have FASTPATH processing, the definer of the exit must have enabled the exit for FASTPATH processing. Then, the caller can request that the CALL request for the exit have FASTPATH processing. For more information, see FASTPATH processing and Recovery for the CALL request.

  • Are the GPRs to contain certain values at entry to the exit routines?

    You most likely want the exit routines to get control with certain values placed in certain GPRs. The RUB parameter provides an area where you tell the system which GPRs are to contain the data and what the data is to be. z/OS MVS Programming: Authorized Assembler Services Reference ALE-DYN describes the format of the RUB and contains an example of its use.

  • Did any exit routines get control at an exit?

    Appropriate return and reason codes indicate that an exit routine ran.

  • Did all exit routines get control at an exit?
    If one or more one exit routines didn't run (usually because the return area was not large enough to contain all the return information):
    • The appropriate reason code indicates that fact.
    • The area provided on the NEXTTOKEN parameter contains a token that identifies the next exit routine that the system is to call.
    • The return area contains return information for any exit routine that ended, or contains the return information that the DEFINE and ADD requests specified. You provided this area for the system to return information needed if not all exit routines were called.

    The caller can reissue the CALL request, using the value in NEXTTOKEN. The system will pass control to the exit routine that is the next to run.