Question & Answer
I am introducing new logic into my CICS Transaction Server for z/OS (CICS TS) application. When the application makes calls to certain modules the calls are failing and I am getting CEE0802C messages in the log. What does the CEE0802C message mean and how do I go about collecting documentation to analyze this problem? I'm fairly sure my application is at fault but I am not sure exactly what it is doing wrong.
Here is the explanation of the CEE0802C message from the Language Environment runtime messages documentation:
CEE0802C Heap storage control information was damaged.
Explanation Internal control information saved in header records within the heap was damaged.
System action No storage is allocated. A severity 4 condition is signaled and the application is terminated.
Programmer response Ensure that your program does not write data to an area larger than the original allocation. For example, allocating a 100 byte area and then writing 120 bytes to this area could cause damage to a storage header.
Since the CEE0802C message indicates that this is an overlay of LE control blocks (and not CICS control blocks), you should use LE's facilities to capture the dump because that will give you a dump taken at the overlays earliest detection.
LE has a Storage Checker that can provide a DUMP closer to the problem. Every time an application requests and frees storage from LE, it checks to determine if there are any overlaid areas. It is activated by the LE run-time option HEAPCHK:
HEAPCHK(ON,1,0,0,0) This is the 'standard' CMD that checks HEAP storage.
HEAPCHK(ON,1,0,10,0) This gives you in addition information about the program that requests HEAP storage areas that has not been freed. It gives you the name of up to 10 programs in the call stack.
(Note that if the application does frequent storage requests this will generate some overhead.)
You should do the following based on other problems where the customer was getting the CEE0802C message:
1) Turn on CICS trace with trace levels 1-2 for components AP, EI, ML, PG, PI, SO and WB and all other domains set to 1.
2) Set LE runtime option HEAPCHK(ON,1,0,10,)
3) Set this slip to request a dump:
SLIP SET,A=SVCD,COMP=U4042,J=yourjobname, SDATA=(PSA,CSA,LPA,LSQA,RGN,SQA,SUM,SWA,TRT,ALLNUC,GRSQ),END
4) Recreate the problem
U4042 (X'FCA') is documented as follows:
Explanation: User HEAP damage was found by the HEAPCHK runtime option.
Programmer Response: Examine the Language Environment message file, looking for HEAPCHK messages that identify where the damage is located.
System Action: The routine terminates.
When LE detects corruption it will generate an SVCDUMP from the U4042 abend slip. It's important that you have CICS trace turned on since it will be taking a SVC dump of the CICS region.
Review the dump along with the CICS joblog around the sametime that you recreate the problem.
CICS/TS CICSTS CICS TS CICS Transaction Server
17 October 2018