If the loop causes a transaction to abend with abend code AICA, it must either be a tight loop or a non-yielding loop. You do not need to find which type you have, although this is likely to be revealed to you when you do your investigation.
Both a tight loop and a non-yielding loop are characterized by being confined to a single user program. You should know the identity of the transaction to which the program belongs, because it is the transaction that abended with code AICA when the runaway task was detected.
When investigating loops that cause transactions to abend AICA, you need the CICS® system dump accompanying the abend. System dumping must be enabled for dump code AICA.
You can use the system dump to find out:
It is also useful to have trace running, as trace can help you to identify the point in your program where looping started. If you have a non-yielding loop, it can probably also show you some instructions in the loop.
A tight loop is unlikely to contain many instructions, and you might be able to capture all the evidence you need from the record of events in the internal trace table. A non-yielding loop may contain more instructions, depending on the EXEC CICS commands it contains, but you might still be able to capture the evidence you need from the record of events in the internal trace table. If you find that it is not big enough, direct tracing to the auxiliary trace destination instead.
You need to trace CICS system activity selectively, to ensure that most of the data you obtain is relevant to the problem. Set up the tracing like this:
You can find guidance about setting up these tracing options in Using traces in problem determination.
Now start the task, and wait until it abends AICA. Format the CICS system dump with formatting keywords KE and TR, to get the kernel storage areas and the internal trace table. (See Formatting system dumps.) You now have the documentation you need to find the loop.
Look first at the kernel task summary. The runaway task is flagged "*YES*" in the ERROR column. The status of the task is shown as "***Running**".
Now use the kernel task number for the looping task to find its linkage stack. If a user task is looping, DFHAPLI, a transaction manager program, should be near the top of the stack. You are likely to find other CICS modules at the top of the stack that have been invoked in response to the abend. For example, those associated with taking the dump. If you find any program or subroutine above DFHAPLI that has not been invoked in response to the error, it is possible that CICS code, or the code of another program, has been looping. If you find that the loop is within CICS code, you need to contact the IBM® Support Center. Make sure you keep the dump, because the Support Center staff need it to investigate the problem.
If the kernel linkage stack entries suggest that the loop is in your user program, you next need to identify the loop.
There are two approaches to identifying loops in user programs. You can use the trace table, or you can look in the transaction dump.
Go to the last entry in the internal trace table, and work backward until you get to an entry for point ID AP 1942. The trace entry should have been made when recovery was entered after the transaction abended AICA. Make a note of the task number, so you can check that any other trace entries you read relate to the same abended task.
The entries preceding AP 1942 should have been made either just before the loop was entered (for a tight loop), or within the loop itself (for a non-yielding loop). Watch in particular for trace entries with the point ID AP 00E1. These are made on entry to the EXEC interface program (DFHEIP) whenever your program issues an EXEC CICS command, and again on exit from the EXEC interface program. Field B gives you the value of EIBFN, which identifies the specific command that was issued. The table below contains a list of EIBFN values and their meanings.
In the column of the EIBFN codes table headed Type, API indicates that the command is described in the CICS Application Programming Reference, and SPI indicates that it is described in the CICS System Programming Reference. SPI does not indicate that the special (SP) translator option is required for this command. FEPI indicates commands used by the CICS/ESA Front End Programming Interface. They are described in the CICS Front End Programming Interface User’s Guide.
EIBFN value | Command | Type |
---|---|---|
X'0202' | ADDRESS | API |
X'0204' | HANDLE CONDITION | API |
X'0206' | HANDLE AID | API |
X'0208' | ASSIGN | API |
X'020A' | IGNORE CONDITION | API |
X'020C' | PUSH | API |
X'020E' | POP | API |
X'0210' | ADDRESS SET | API |
X'0402' | RECEIVE | API |
X'0404' | SEND | API |
X'0406' | CONVERSE | API |
X'0408' | ISSUE EODS | API |
X'040A' | ISSUE COPY | API |
X'040C' | WAIT TERMINAL | API |
X'040E' | ISSUE LOAD | API |
X'0410' | WAIT SIGNAL | API |
X'0412' | ISSUE RESET | API |
X'0414' | ISSUE DISCONNECT | API |
X'0416' | ISSUE ENDOUTPUT | API |
X'0418' | ISSUE ERASEAUP | API |
X'041A' | ISSUE ENDFILE | API |
X'041C' | ISSUE PRINT | API |
X'041E' | ISSUE SIGNAL | API |
X'0420' | ALLOCATE | API |
X'0422' | FREE | API |
X'0424' | POINT | API |
X'0426' | BUILD ATTACH | API |
X'0428' | EXTRACT ATTACH | API |
X'042A' | EXTRACT TCT | API |
X'042C' | WAIT CONVID | API |
X'042E' | EXTRACT PROCESS | API |
X'0430' | ISSUE ABEND | API |
X'0432' | CONNECT PROCESS | API |
X'0434' | ISSUE CONFIRMATION | API |
X'0436' | ISSUE ERROR | API |
X'0438' | ISSUE PREPARE | API |
X'043A' | ISSUE PASS | API |
X'043C' | EXTRACT LOGONMSG | API |
X'043E' | EXTRACT ATTRIBUTES | API |
X'0602' | READ | API |
X'0604' | WRITE FILE | API |
X'0606' | REWRITE | API |
X'0608' | DELETE | API |
X'060A' | UNLOCK | API |
X'060C' | STARTBR | API |
X'060E' | READNEXT | API |
X'0610' | READPREV | API |
X'0612' | ENDBR | API |
X'0614' | RESETBR | API |
X'0802' | WRITEQ TD | API |
X'0804' | READQ TD | API |
X'0806' | DELETEQ TD | API |
X'0A02' | WRITEQ TS | API |
X'0A04' | READQ TS | API |
X'0A06' | DELETEQ TS | API |
X'0C02' | GETMAIN | API |
X'0C04' | FREEMAIN | API |
X'0E02' | LINK | API |
X'0E04' | XCTL | API |
X'0E06' | LOAD | API |
X'0E08' | RETURN | API |
X'0E0A' | RELEASE | API |
X'0E0C' | ABEND | API |
X'0E0E' | HANDLE ABEND | API |
X'1002' | ASKTIME | API |
X'1004' | DELAY | API |
X'1006' | POST | API |
X'1008' | START | API |
X'1008' | START BREXIT | API |
X'100A' | RETRIEVE | API |
X'100C' | CANCEL | API |
X'1202' | WAIT EVENT | API |
X'1204' | ENQ | API |
X'1206' | DEQ | API |
X'1208' | SUSPEND | API |
X'1402' | WRITE JOURNALNUM | API |
X'1404' | WAIT JOURNALNUM | API |
X'1406' | WRITE JOURNALNAME | API |
X'1408' | WAIT JOURNALNAME | API |
X'1602' | SYNCPOINT | API |
X'1604' | RESYNC ENTRYNAME | SPI |
X'1802' | RECEIVE MAP | API |
X'1804' | SEND MAP | API |
X'1806' | SEND TEXT | API |
X'1808' | SEND PAGE | API |
X'180A' | PURGE MESSAGE | API |
X'180C' | ROUTE | API |
X'180E' | RECEIVE PARTN | API |
X'1810' | SEND PARTNSET | API |
X'1812' | SEND CONTROL | API |
X'1C02' | DUMP | API |
X'1E02' | ISSUE ADD | API |
X'1E04' | ISSUE ERASE | API |
X'1E06' | ISSUE REPLACE | API |
X'1E08' | ISSUE ABORT | API |
X'1E0A' | ISSUE QUERY | API |
X'1E0C' | ISSUE END | API |
X'1E0E' | ISSUE RECEIVE | API |
X'1E10' | ISSUE NOTE | API |
X'1E12' | ISSUE WAIT | API |
X'1E14' | ISSUE SEND | API |
X'2002' | BIF DEEDIT | API |
X'2004' | DEFINE COUNTER | API |
X'2006' | GET COUNTER | API |
X'2008' | UPDATE COUNTER | API |
X'200A' | DELETE COUNTER | API |
X'200C' | REWIND COUNTER | API |
X'200E' | QUERY COUNTER | API |
X'2014' | DEFINE DCOUNTER | API |
X'2016' | GET DCOUNTER | API |
X'2018' | UPDATE DCOUNTER | API |
X'201A' | DELETE DCOUNTER | API |
X'201C' | REWIND DCOUNTER | API |
X'201E' | QUERY DCOUNTER | API |
X'2202' | ENABLE PROGRAM | SPI |
X'2204' | DISABLE | SPI |
X'2206' | EXTRACT EXIT | SPI |
X'2402' | ALLOCATE | API |
X'2404' | ASSIGN | API |
X'2406' | EXTRACT PROCESS | API |
X'2408' | FREE | API |
X'240A' | ISSUE ABEND | API |
X'240C' | CONNECT PROCESS | API |
X'240E' | ISSUE CONFIRMATION | API |
X'2410' | ISSUE ERROR | API |
X'2412' | ISSUE SIGNAL | API |
X'2414' | RECEIVE | API |
X'2416' | SEND | API |
X'2418' | WAIT | API |
X'241A' | ISSUE PREPARE | API |
X'241C' | EXTRACT ATTRIBUTES | API |
X'3002' | CREATE PROGRAM | SPI |
X'3004' | CREATE MAPSET | SPI |
X'3006' | CREATE PARTITIONSET | SPI |
X'3008' | CREATE TRANSACTION | SPI |
X'300A' | CREATE PROFILE | SPI |
X'300C' | CREATE TYPETERM | SPI |
X'300E' | CREATE CONNECTION | SPI |
X'3010' | CREATE TERMINAL | SPI |
X'3012' | CREATE SESSIONS | SPI |
X'3014' | CREATE FILE | SPI |
X'3016' | CREATE LSRPOOL | SPI |
X'3018' | CREATE PARTNER | SPI |
X'301A' | CREATE TRANCLASS | SPI |
X'301C' | CREATE TDQUEUE | SPI |
X'301E' | CREATE JOURNALMODEL | SPI |
X'3020' | CREATE DB2CONN | SPI |
X'3022' | CREATE DB2ENTRY | SPI |
X'3024' | CREATE DB2TRAN | SPI |
X'3026' | CREATE PROCESSTYPE | SPI |
X'3028' | CREATE TSMODEL | SPI |
X'302A' | CREATE ENQMODEL | SPI |
X'302C' | CREATE REQUESTMODEL | SPI |
X'302E' | CREATE DOCTEMPLATE | SPI |
X'3030' | CREATE TCPIPSERVICE | SPI |
X'3402' | DEFINE ACTIVITY | API |
X'3404' | DEFINE PROCESS | API |
X'3406' | RUN ACTIVITY | API |
X'3408' | RUN ACQPROCESS | API |
X'340E' | ACQUIRE PROCESS | API |
X'3410' | ACQUIRE ACTIVITYID | API |
X'3412' | DELETE CONTAINER | API |
X'3414' | GET CONTAINER | API |
X'3416' | PUT CONTAINER | API |
X'3418' | RESET ACTIVITY | API |
X'341A | CHECK ACTIVITY | API |
X'341C' | CANCEL ACTIVITY | API |
X'341E' | CANCEL ACQPROCESS | API |
X'3420' | SUSPEND ACTIVITY | API |
X'3422' | SUSPEND ACQPROCESS | API |
X'3424' | RESUME ACTIVITY | API |
X'3426' | RESUME ACQPROCESS | API |
X'3428' | DELETE ACTIVITY | API |
X'342A' | LINK ACQPROCESS | API |
X'342C' | LINK ACTIVITY | API |
X'342E' | CANCEL ACQACTIVITY | API |
X'3430' | RUN ACQACTIVITY | API |
X'3432' | LINK ACQACTIVITY | API |
X'3434' | SUSPEND ACQACTIVITY | API |
X'3436' | RESUME ACQACTIVITY | API |
X'3438' | CHECK ACQPROCESS | API |
X'343A' | CHECK ACQACTIVITY | API |
X'343C' | RESET ACQPROCESS | API |
X'3602' | DEFINE INPUT EVENT | API |
X'3602' | DEFINE COMPOSITE EVENT | API |
X'3604' | DELETE EVENT | API |
X'3608' | ADD SUBEVENT | API |
X'360A' | REMOVE SUBEVENT | API |
X'360E' | TEST EVENT | API |
X'3610' | RETRIEVE REATTACH EVENT | API |
X'3612' | RETRIEVE SUBEVENT | API |
X'3614' | DEFINE TIMER | API |
X'3616' | DELETE TIMER | API |
X'3618' | CHECK TIMER | API |
X'361A' | FORCE TIMER | API |
X'3802' | WEB RECEIVE | API |
X'3804' | WEB SEND | API |
X'3806' | WEB READ | API |
X'3808' | WEB STARTBROWSE | API |
X'380A' | WEB READNEXT | API |
X'380C' | WEB ENDBROWSE HTTPHEADER | API |
X'380E' | WEB WRITE | API |
X'3810' | WEB EXTRACT | API |
X'3814' | WEB RETRIEVE | API |
X'3A02' | INQ RRMS | SPI |
X'3C02' | DOCUMENT CREATE | API |
X'3C04' | DOCUMENT INSERT | API |
X'3C06' | DOCUMENT RETRIEVE | API |
X'3C08' | DOCUMENT SET | API |
X'3E0E' | EXTRACT TCPIP | API |
X'3E10' | EXTRACT CERTIFICATE | API |
X'4202' | INQUIRE AUTINSTMODEL | SPI |
X'4210' | DISCARD AUTINSTMODEL | SPI |
X'4402' | INQUIRE PARTNER | SPI |
X'4410' | DISCARD PARTNER | SPI |
X'4602' | INQUIRE PROFILE | SPI |
X'4610' | DISCARD PROFILE | SPI |
X'4802' | ENTER TRACENUM | API |
X'4804' | MONITOR | API |
X'4A02' | ASKTIME ABSTIME | API |
X'4A04' | FORMATTIME | API |
X'4C02' | INQUIRE FILE | SPI |
X'4C04' | SET FILE | SPI |
X'4C10' | DISCARD FILE | SPI |
X'4E02' | INQUIRE PROGRAM | SPI |
X'4E04' | SET PROGRAM | SPI |
X'4E10' | DISCARD PROGRAM | SPI |
X'5002' | INQUIRE TRANSACTION | SPI |
X'5004' | SET TRANSACTION | SPI |
X'5010' | DISCARD TRANSACTION | SPI |
X'5202' | INQUIRE TERMINAL | SPI |
X'5204' | SET TERMINAL | SPI |
X'5206' | INQUIRE NETNAME | SPI |
X'5208' | SET NETNAME | SPI |
X'5210' | DISCARD TERMINAL | SPI |
X'5212' | INQUIRE TERMINAL | SPI |
X'5214' | SET TERMINAL | SPI |
X'5216' | INQUIRE NETNAME | SPI |
X'5402' | INQUIRE SYSTEM | SPI |
X'5404' | SET SYSTEM | SPI |
X'5412' | INQ SYSTEM | SPI |
X'5602' | SPOOLOPEN INPUT | API |
X'5602' | SPOOLOPEN OUTPUT | API |
X'5604' | SPOOLREAD | API |
X'5606' | SPOOLWRITE | API |
X'5610' | SPOOLCLOSE | API |
X'5802' | INQUIRE CONNECTION | SPI |
X'5804' | SET CONNECTION | SPI |
X'5806' | PERFORM ENDAFFINITY | SPI |
X'5810' | DISCARD CONNECTION | SPI |
X'5A02' | INQUIRE MODENAME | SPI |
X'5A04' | SET MODENAME | SPI |
X'5C02' | INQUIRE TDQUEUE | SPI |
X'5C04' | SET TDQUEUE | SPI |
X'5C10' | DISCARD TDQUEUE | SPI |
X'5E02' | INQUIRE TASK | SPI |
X'5E04' | SET TASK | SPI |
X'5E06' | CHANGE TASK | API |
X'5E08' | INQUIRE STORAGE | SPI |
X'5E12' | INQUIRE TCLASS | SPI |
X'5E14' | SET TCLASS | SPI |
X'5E18' | DISCARD TRANCLASS | SPI |
X'5E1A' | INQUIRE TRANCLASS | SPI |
X'5E1C' | SET TRANCLASS | SPI |
X'5E22' | WAIT EXTERNAL | API |
X'5E32' | WAITCICS | API |
X'6002' | INQUIRE JOURNALNUM | SPI |
X'6004' | SET JOURNALNUM | SPI |
X'6010' | DISCARD JOURNALNAME | SPI |
X'6012' | INQUIRE JOURNALNAME | SPI |
X'6014' | SET JOURNALNAME | SPI |
X'6202' | INQUIRE VOLUME | SPI |
X'6204' | SET VOLUME | SPI |
X'6402' | PERFORM SECURITY | SPI |
X'6602' | INQUIRE DUMPDS | SPI |
X'6604' | SET DUMPDS | SPI |
X'6612' | INQUIRE TRANDUMPCODE | SPI |
X'6614' | SET TRANDUMPCODE | SPI |
X'6622' | INQUIRE SYSDUMPCODE | SPI |
X'6624' | SET SYSDUMPCODE | SPI |
X'6802' | INQUIRE VTAM® | SPI |
X'6804' | SET VTAM | SPI |
X'6812' | INQUIRE AUTOINSTALL | SPI |
X'6814' | SET AUTOINSTALL | SPI |
X'6822' | INQUIRE DELETSHIPPED | SPI |
X'6824' | SET DELETSHIPPED | SPI |
X'6826' | PERFORM DELETSHIPPED | SPI |
X'6A02' | QUERY SECURITY | API |
X'6C02' | WRITE OPERATOR | API |
X'6C12' | CICSMESSAGE | API |
X'6E02' | INQUIRE IRC | SPI |
X'6E04' | SET IRC | SPI |
X'7002' | INQUIRE STATISTICS | SPI |
X'7004' | SET STATISTICS | SPI |
X'7006' | PERFORM STATISTICS | SPI |
X'7008' | COLLECT STATISTICS | SPI |
X'7012' | INQUIRE MONITOR | SPI |
X'7014' | SET MONITOR | SPI |
X'7202' | PERFORM RESETTIME | SPI |
X'7402' | SIGNON | API |
X'7404' | SIGNOFF | API |
X'7406' | VERIFY PASSWORD | API |
X'7408' | CHANGE PASSWORD | API |
X'7602' | PERFORM SHUTDOWN | SPI |
X'7802' | INQUIRE TRACEDEST | SPI |
X'7804' | SET TRACEDEST | SPI |
X'7812' | INQUIRE TRACEFLAG | SPI |
X'7814' | SET TRACEFLAG | SPI |
X'7822' | INQUIRE TRACETYPE | SPI |
X'7824' | SET TRACETYPE | SPI |
X'7A02' | INQUIRE DSNAME | SPI |
X'7A04' | SET DSNAME | SPI |
X'7C02' | INQUIRE EXCI | SPI |
X'7E02' | DUMP TRANSACTION | API |
X'7E04' | PERFORM DUMP | SPI |
X'8002' | INQUIRE TSQUEUE | SPI |
X'8004' | SET TSQUEUE | SPI |
X'8012' | INQUIRE TSQNAME | SPI |
X'8014' | SET TSQNAME | SPI |
X'801A' | INQUIRE TSPOOL | SPI |
X'8022' | INQUIRE TSMODEL | SPI |
X'8030' | DISCARD TSMODEL | SPI |
X'820C' | REQUEST PASSTICKET | FEPI |
X'820E' | AP | FEPI |
X'8210' | ALLOCATE POOL | FEPI |
X'8210' | ALLOCATE PASSCONVID | FEPI |
X'8212' | CONVERSE FORMATTED | FEPI |
X'8214' | CONVERSE DATASTREAM | FEPI |
X'8216' | EXTRACT CONV | FEPI |
X'8218' | EXTRACT FIELD | FEPI |
X'821A' | EXTRACT STSN | FEPI |
X'821C' | FREE | FEPI |
X'821E' | ISSUE | FEPI |
X'8220' | RECEIVE FORMATTED | FEPI |
X'8222' | RECEIVE DATASTREAM | FEPI |
X'8224' | SEND FORMATTED | FEPI |
X'8226' | SEND DATASTREAM | FEPI |
X'8228' | START | FEPI |
X'840E' | SP NOOP | FEPI |
X'8422' | INQUIRE PROPERTYSET | FEPI |
X'8428' | INSTALL PROPERTYSET | FEPI |
X'8430' | DISCARD PROPERTYSET | FEPI |
X'8442' | INQUIRE NODE | FEPI |
X'8444' | SET NODE | FEPI |
X'8444' | SET NODELIST | FEPI |
X'8448' | INSTALL NODELIST | FEPI |
X'844A' | ADD POOL | FEPI |
X'844C' | DELETE POOL | FEPI |
X'8450' | DISCARD NODELIST | FEPI |
X'8462' | INQUIRE POOL | FEPI |
X'8464' | SET POOL | FEPI |
X'8464' | SET POOLLIST | FEPI |
X'8468' | INSTALL POOL | FEPI |
X'8470' | DISCARD POOL | FEPI |
X'8482' | INQUIRE TARGET | FEPI |
X'8484' | SET TARGETLIST | FEPI |
X'8484' | SET TARGET | FEPI |
X'8488' | INSTALL TARGETLIST | FEPI |
X'8490' | DISCARD TARGETLIST | FEPI |
X'84A2' | INQUIRE CONNECTION | FEPI |
X'84A4' | SET CONNECTION | FEPI |
X'8602' | ACQUIRE | SPI |
X'8802' | INQUIRE EXITPROGRAM | SPI |
X'8A02' | INQUIRE REQID | SPI |
X'8C02' | WRITE MESSAGE | API |
X'9002' | INQUIRE UOW | SPI |
X'9004' | SET UOW | SPI |
X'9022' | INQUIRE UOWENQ | SPI |
X'9042' | INQUIRE UOWLINK | SPI |
X'9044' | SET UOWLINK | SPI |
X'9062' | INQUIRE UOWDSNFAIL | SPI |
X'9082' | INQUIRE ENQMODEL | SPI |
X'9084' | SET ENQMODEL | SPI |
X'9090' | DISCARD ENQMODEL | SPI |
X'9202' | INQUIRE JOURNALMODEL | SPI |
X'9210' | DISCARD JOURNALMODEL | SPI |
X'9212' | INQUIRE STREAMNAME | SPI |
X'9402' | INQUIRE DB2CONN | SPI |
X'9404' | SET DB2CONN | SPI |
X'9410' | DISCARD DB2CONN | SPI |
X'9422' | INQUIRE DB2ENTRY | SPI |
X'9424' | SET DB2ENTRY | SPI |
X'9430' | DISCARD DB2ENTRY | SPI |
X'9442' | INQUIRE DB2TRAN | SPI |
X'9444' | SET DB2TRAN | SPI |
X'9450' | DISCARD DB2TRAN | SPI |
X'9602' | INQUIRE PROCESSTYPE | SPI |
X'9604' | SET PROCESSTYPE | SPI |
X'9610' | DISCARD PROCESSTYPE | SPI |
X'9612' | INQUIRE ACTID | SPI |
X'9614' | INQUIRE CONTAIN | SPI |
X'9616' | INQUIRE EVENT | SPI |
X'9618' | INQUIRE PROCESS | SPI |
X'9620' | STARTBROWSE ACTIVITY | SPI |
X'9622' | GETNEXT ACTIVITY | SPI |
X'9624' | ENDBROWSE ACTIVITY | SPI |
X'9626' | STARTBROWSE CONTAINER | SPI |
X'9628' | GETNEXT CONTAINER | SPI |
X'962A' | ENDBROWSE CONTAINER | SPI |
X'962C' | STARTBROWSE EVENT | SPI |
X'962E' | GETNEXT EVENT | SPI |
X'9630' | ENDBROWSE EVENT | SPI |
X'9632' | STARTBROWSE PROCESS | SPI |
X'9634' | GETNEXT PROCESS | SPI |
X'9636' | ENDBROWSE PROCESS | SPI |
X'9638' | INQUIRE TIMER | SPI |
X'963A' | STARTBROWSE TIMER | SPI |
X'963C' | GETNEXT TIMER | SPI |
X'963E' | ENDBROWSE TIMER | SPI |
X'9802' | INQUIRE CFDTPOOL | SPI |
X'9A02' | INQUIRE REQUESTMODEL | SPI |
X'9A10' | DISCARD REQUESTMODEL | SPI |
X'9C02' | INQUIRE TCPIPSERVICE | SPI |
X'9C04' | SET TCPIPSERVICE | SPI |
X'9C10' | DISCARD TCPIPSERVICE | SPI |
X'9C12' | INQUIRE TCPIP | SPI |
X'9C14' | SET TCPIP | SPI |
X'9C22' | INQUIRE WEB | SPI |
X'9C24' | SET WEB | SPI |
X'9E02' | INQUIRE DOCTEMPLATE | SPI |
X'9E10' | DISCARD DOCTEMPLATE | SPI |
X'B002' | INQUIRE JVMPOOL | SPI |
X'B004' | SET JVMPOOL | SPI |
X'B202' | INQUIRE CORBASERVER | SPI |
X'B204' | SET CORBASERVER | SPI |
X'B206' | PERFORM CORBASERVER | SPI |
X'B210' | DISCARD CORBASERVER | SPI |
X'B222' | INQUIRE DJAR | SPI |
X'B226' | PERFORM DJAR | SPI |
X'B230' | DISCARD DJAR | SPI |
X'B242' | INQUIRE BEAN | SPI |
X'B402' | INQUIRE BRFACILITY | SPI |
X'B404' | SET BRFACILITY | SPI |
X'B602' | INQUIRE DISPATCHER | SPI |
X'B604' | SET DISPATCHER | SPI |
For trace entries made on exit from DFHEIP, field A gives you the response code from the request. Look carefully at any response codes--they could provide the clue to the loop. Has the program been designed to deal with every possible response from DFHEIP? Could the response code you see explain the loop?
If you see a repeating pattern of trace points for AP 00E1, you have a non-yielding loop. If you can match the repeating pattern to statements in the source code for your program, you have identified the limits of the loop.
If you see no repeating pattern of trace points for AP 00E1, it is likely that you have a tight loop. The last entry for AP 00E1 (if there is one) should have been made from a point just before the program entered the loop. You might be able to recognize the point in the program where the request was made, by matching trace entries with the source code of the program.
First you need to find the PSW, and see if it points into your program. This is likely to be the case if you have a tight loop, and it should lead you to an instruction within the loop.
If the next instruction address is not within your code, it is of less value for locating the loop. However, you should attempt to identify the module containing the instruction, as it is likely to be one that was called during the execution of a CICS request made within the loop. Use the module index at the end of the formatted dump to find the module name. If the PSW address is not contained in one of these areas, another program was probably executing on behalf of CICS when the runaway task timer expired.
If the PSW does point to a module outside your application program, you need to find the address of the return point in your program from the contents of register 14 in the appropriate register save area. The return address will lie within the loop, if the loop is not confined to system code.
When you have located a point within the loop, work through the source code and try to find the limits of the loop.
When you have identified the limits of the loop, you need to find the reason why the loop occurred. Assuming you have the trace, and EI level-1 tracing has been done, ensure that you can explain why each EIP entry is there. Verify that the responses are as expected.
A good place to look for clues to loops is immediately before the loop sequence, the first time it is entered. Occasionally, a request that results in an unexpected return code can trigger a loop. However, you usually can only see the last entry before the loop if you have CICS auxiliary or GTF trace running, because the internal trace table is likely to wrap before the AICA abend occurs.