v Before passing control to a task-related user exit program, CICS inhibits:
– The ability to purge tasks
– The monitoring of runaway tasks
v While control is in a task-related user exit program:
– Purge requests are deferred until control is returned from the task-related user
exit program.
– Monitoring of runaway tasks is inactive.
– Force purge requests are actioned.
If the PURGEABLE option is specified, before passing control to a task-related user
exit program CICS inhibits the monitoring of runaway tasks but not the ability to
purge tasks. While control is in a task-related user exit program:
v Purge requests are actioned.
v Force purge requests are actioned.
v Monitoring of runaway tasks is inactive.
See “Wait states in your task-related user exit program” on page 292 for a fuller
explanation of the PURGEABLE option.
Using CICS services in your task-related user exit program
You might find some CICS services useful in your exit program. These can be
invoked using EXEC CICS commands. However, you should take note of the
following:
v If your program is invoked because of a CICS abend, it must not use any CICS
services. See “Coding a program to be invoked at CICS termination” on page
298.
v EXEC CICS commands that cause an XCTL (either directly or implied)—for
example, EXEC CICS XCTL or EXEC CICS SHUTDOWN—must never be used.
v DFHEIENT and DFHEIRET must be in your program. But see the note about not
using DFHEIENT in abend invocations, in “Limitations” on page 298. For further
details of the DFHEIENT and DFHEIRET macros, see DFHECALL macro, in the
CICS Application Programming Reference manual.
v If your exit program entry point is immediately followed by an occurrence of a
DFHEIENT macro, inserted either implicitly by CICS or explicitly in the program,
then the expansion of the DFHEIENT macro stores incorrect values at DFHEIBP
and DFHEICAP. Your code can subsequently correct this by copying UEPEIB into
DFHEIBP, reloading the EIB base register (DFHEIBR) from UEPEIB, and setting
DFHEICAP to X'80000000'. For example,
TESTPROG DFHEIENT CODEREG=2,EIBREG=11,DATAREG=10
USING DFHUEPAR,1
MVC DFHEIBP,UEPEIB Get correct EIB address
L DFHEIBR,UEPEIB Reload EIB base register
MVC DFHEICAP,=X’80000000’
Note that the entry point of a program does not have to be at the start of the
program and can be positioned after the DFHEIENT macro.
v The DFHEIENT macro allocates dynamic storage to be mapped by the
DFHEISTG DSECT. You must return to CICS by means of the DFHEIRET macro,
which frees the dynamic storage.
v Command-level calls use registers 0, 1, 14, and 15.
v Do not issue a syncpoint in start-of-task, end-of-task, or syncpoint invocations.
Chapter 2. Task-related user exit programs 291