Six exit routines can be entered when your main program issues
a VSAM request macro (GET, PUT, POINT, and ERASE) and the macro has
not completed: LERAD, SYNAD, EODAD, UPAD, RLSWAIT or the EXCEPTIONEXIT
routine. Entering the LERAD, SYNAD, EODAD, or EXCEPTIONEXIT indicates
that the macro failed to complete successfully. When your exit routine
completes its processing, it can return to your main program in one
of two ways:
- The exit routine can return to VSAM (by the return address in
register 14). VSAM then returns to your program at the instruction
following the VSAM request macro that failed to complete successfully.
This is the easier way to return to your program.
If your error
recovery and correction process needs to reissue the failing VSAM
macro against the RPL to retry the failing request or to correct it:
- Your exit routine can correct the RPL (using MODCB), then set
a switch to indicate to your main program that the RPL is now ready
to retry. When your exit routine completes processing, it can return
to VSAM (via register 14), which returns to your main program. Your
main program can then test the switch and reissue the VSAM macro and
RPL.
- Your exit routine can issue a GENCB macro to build an RPL, and
then copy the RPL (for the failing VSAM macro) into the newly built
RPL. At this point, your exit routine can issue VSAM macros against
the newly built RPL. When your exit routine completes processing,
it can return to VSAM (using register 14), which returns to your main
program.
- The exit routine can determine the appropriate return point in
your program, then branch directly to that point. Note that when VSAM
enters your exit routine, none of the registers contains the address
of the instruction following the failing macro.
You are required
to use this method to return to your program if, during the error
recovery and correction process, your exit routine issued a GET, PUT,
POINT, or ERASE macro that refers to the RPL referred to by the failing
VSAM macro. (That is, the RPL has been reissued by the exit routine.)
In this case, VSAM has lost track of its reentry point to your main
program. If the exit routine returns to VSAM, VSAM issues an error
return code.