CICS users killed their terminal sessions through CICS. This left their CICS transactions in a USER WAIT/IDMS external suspend type.
In IDMS we see the following messages:
DC081005 V3 T10679 TASK:ADS2 PROG:ADSOMAIN; TERMINAL IS DEAD - MAP map_name
DC027007 V3 T10679 TASK:ADS2 PROG:ADSOMAIN ABENDED WITH CODE D002
DC201006 V3 T1 CV-STATUS PROGNAME SUBSCHEM --RU-TASK- --LOCAL-IDENT-- PRI
DC201006 V3 T1 U ABORT RHDCUCFZ ABT=D901 12 CICS 9920 254
DC243011 V3 T10715 TASK:task_name PROG:ADSOMAIN; TERMINAL REQUEST ERROR FOR MAP map_name PAGE 0001
DC027007 V3 T10715 TASK:task_name PROG:ADSOMAIN ABENDED WITH CODE D002
DC201006 V3 T1 CV-STATUS PROGNAME SUBSCHEM --RU-TASK- --LOCAL-IDENT-- PRI
DC201006 V3 T1 U ABORT RHDCUCFZ ABT=D901 12 CICS 9978 254
We had to manually force purge the suspended transactions in CICS.
Is there a way to detect and automatically clean up any outstanding transactions when the user cancels out of their network session (i.e. TPX)?
Release : 19.0
The D901 abends indicates the terminal has been disconnected in CICS.
To resolve the problem do the following:
To abort the session for any CICS terminal that disconnects or goes out of service implement the UCF CICS Abort Session Program UCFCICZ.
It can be called from the CICS DFHTEP, DFHZNEP, or XFAINTU programs.
The program name RHDCUCFZ in the DC201006 is set by the CICS Abort Session Program, so it means that UCFCICZ has already been implemented.
One solution to the RHDCUCFZ D901 abends is described in article 222570 - IDMS DC201006 V2 T1 U ABORT RHDCUCFZ ABT=D901 CICS.
The #UCFCICS macro needs to be assembled with LASTOUT=TASKEND and RESETKB=TASKEND and the #UCFUTD macros should specify BUFSIZ=8192.
There is also another way that a CICS task can be left hanging in CICS after UCFCICZ is called.
This can happen if a CICS terminal is aborted while it is in a UCF session with the IDMS backend.
To resolve this turn on optional bit 198 by specifying #DEFOPTF OPT00198 in RHDCOPTF.
Here is the description of the problem from PTF LO44434 which introduced this feature in IDS 14.1:
NOTE: This is a required APAR, but it implements an
optional function. In order to enable the optional
function described below, use #DEFOPTF OPT00198 in
module RHDCOPTF.If a CICS terminal is aborted while it is in a UCF
session with a CA-IDMS/UCF backend, UCFCICZ can be
used to help clean up the back-end and front-end
storage and control blocks associated with that UCF
session. Occasionally, UCFCICZ can be driven while
a UCF task is active on the terminal (as opposed to
being in a pseudo-converse). In that case, the
back-end control blocks will still be cleaned up,
but a CICS task may hang on the front end waiting
on LREECB (in a WAIT EVENT for CICS Version 2 or in
a WAIT EXTERNAL ... NOTPURGEABLE for CICS Version 3
and above).
This APAR will cause a cross-memory post of the
LREECB to allow the task to terminate. Note: If a
FORCEPURGE condition should arise on that terminal
between the time the WAIT occurs and the time the
cross-memory post occurs, the attempted
cross-memory post may cause CICS storage corruption
with unpredictable results. A FORCEPURGE condition
could arise, for example, from a CICS terminal
operator on a different terminal issuing a CEMT SET
TERMINAL(termid) FORCEPURGE or from a node error
program issuing an EXEC CICS SET TASK FORCEPURGE.
See documentation section CICS Abort Session Program