>I have a question about error recovery and here is the situation.
 >
>1. Cobol STC calls an assembler module which passes
>a RACF command using IRRSEQ00
>2. The customer has a large profile, over 32K
>3. We are seeing a S80A in 'IRRSEQ00'
 >
>Now the question, I know I can write a Cobol Condition Handler, but since
>the abend is occurring in an assembler module, can i change the Assembler
>called to do a ESTAE ..? I want to be able to note the S80A abend but still
>recovery.  I am being realistic ?
>
>What I am not sure of is that the S80A will percolate down where a Cobol
>condition handler will catch it. I am in a void in this area and need some
>help.


Generally speaking, no, you should not use ESTAE (and ESPIE) in code that is 
part of an LE application. LE documents the MVS services that are deprecated to 
be used in that context, because they *may* interfere with LE processing.


Now, LE cannot make sure those services are not used because you can CALL other 
(standalone) programs to help you perform the task at hand. Those (standalone) 
programs may well protect themselves via ESTAE or other MVS recovery services. 
Such programs will register error handlers upon entry and deregister again 
before return.


ESTAE type recovery routines are invoked upon ABENDs in the reverse order of 
their registration. When a recovery routine decides to retry, not other recover 
routine will get control for this error. (There is more to this, read in z/OS 
MVS Assembler Services Guide.) When a recovery routine decides not to retry, 
i.e. it decides to percolate, then the next recovery routine (if any) will get 
control.


This is MVS recovery management, an LE is part of this game, so your assembler 
routine's ESTAE will get control, and when it percolates, LE's ESTAE routine 
will be given control.


Besides the ESTAE interface, there is also the ESPIE interface. LE registers an 
ESPIE recovery routine, if TRAP(ON,SPIE) is in effect, to gain control for 
program check interrupts long before they are turned into an S0Cx type ABEND.


We just learned in the course of a PMR, there are cases where LE's ESPIE 
routine decides to percolate a program check into an ABEND, *but* is does so in 
an unexpected way: LE deregisters its ESTAE routine before turning the program 
check into an ABEND. This works fine as long as not ESTAE routine has been 
registered *after" LE's. If so, LE thinks it deregisters its own ESTAE routine, 
but since ESTAE routines are chained LIFO, it deregisters some other code's 
ESTAE routine.


This behaviour probably does not hurt your case, because you probably are not 
interested in program checks anyway. And for non-program-check ABENDs, the 
latest ESTAE should get control first (I write "should" because I cannot say 
for sure lack of access to internal LE documentation).


If you want to be sure, you could register your own ESTAE *and* ESPIE upon 
entry, and deregister both before return. *Note*, you must take care to 
re-register LE's ESPIE routine, since there can only ever be a single ESPIE 
routine at one point in time (ESPIE documents how to do this). With your own  
ESTAE and ESPIE in place, there is no way LE would be notified of an error 
before your code.




Not sure why you want to get control in the assembler code, since I understand 
it is tightly bound to the Cobol code calling it. What do you want to do when 
you get notified of an ABEND?




--
Peter Hunkeler



----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to