CICS FREEMAIN provides memory deallocation capabilities for programs and transactions. It enables programs to free allocated memory, manage memory cleanup, and handle memory deallocation in CICS environments.
CICS FREEMAIN is a command that allows programs to deallocate memory in the system. It provides memory deallocation capabilities, memory cleanup, and memory management for CICS applications.
12345EXEC CICS FREEMAIN [DATA(data-area)] [LENGTH(data-length)] [RESP(response-code)] END-EXEC
Main storage memory types
Memory area types
Dynamic memory types
System memory types
12345678910111213141516171819202122232425IDENTIFICATION DIVISION. PROGRAM-ID. FREEMAIN01. DATA DIVISION. WORKING-STORAGE SECTION. 01 DATA-AREA PIC X(100). 01 DATA-LENGTH PIC S9(4) COMP VALUE 100. 01 RESPONSE-CODE PIC S9(8) COMP. PROCEDURE DIVISION. DISPLAY 'Freeing memory' DISPLAY 'Data length: ' DATA-LENGTH EXEC CICS FREEMAIN DATA(DATA-AREA) LENGTH(DATA-LENGTH) RESP(RESPONSE-CODE) END-EXEC IF RESPONSE-CODE = DFHRESP(NORMAL) DISPLAY 'Memory freed successfully' ELSE DISPLAY 'Memory free failed' END-IF EXEC CICS RETURN END-EXEC.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152IDENTIFICATION DIVISION. PROGRAM-ID. FREEMAIN02. DATA DIVISION. WORKING-STORAGE SECTION. 01 DATA-AREA PIC X(100). 01 DATA-LENGTH PIC S9(4) COMP VALUE 100. 01 RESPONSE-CODE PIC S9(8) COMP. 01 FREE-COUNT PIC S9(2) COMP VALUE 0. 01 MAX-FREES PIC S9(2) COMP VALUE 3. 01 MEMORY-STATUS PIC X(1). 01 MEMORY-LIST. 05 MEMORY-ITEM OCCURS 3 TIMES. 10 MEMORY-ID PIC X(8). 10 MEMORY-SIZE PIC S9(4) COMP. 10 MEMORY-STATUS PIC X(1). PROCEDURE DIVISION. PERFORM INITIALIZE-MEMORY PERFORM FREE-MULTIPLE-MEMORY EXEC CICS RETURN END-EXEC. INITIALIZE-MEMORY. MOVE 'MEM001' TO MEMORY-ID(1) MOVE 100 TO MEMORY-SIZE(1) MOVE 'MEM002' TO MEMORY-ID(2) MOVE 200 TO MEMORY-SIZE(2) MOVE 'MEM003' TO MEMORY-ID(3) MOVE 300 TO MEMORY-SIZE(3). FREE-MULTIPLE-MEMORY. PERFORM VARYING FREE-COUNT FROM 1 BY 1 UNTIL FREE-COUNT > MAX-FREES MOVE MEMORY-SIZE(FREE-COUNT) TO DATA-LENGTH PERFORM FREE-SINGLE-MEMORY IF RESPONSE-CODE = DFHRESP(NORMAL) MOVE 'F' TO MEMORY-STATUS(FREE-COUNT) DISPLAY 'Memory ' FREE-COUNT ' freed successfully' ELSE MOVE 'E' TO MEMORY-STATUS(FREE-COUNT) DISPLAY 'Memory ' FREE-COUNT ' free failed' END-IF END-PERFORM. FREE-SINGLE-MEMORY. EXEC CICS FREEMAIN DATA(DATA-AREA) LENGTH(DATA-LENGTH) RESP(RESPONSE-CODE) END-EXEC.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950IDENTIFICATION DIVISION. PROGRAM-ID. FREEMAIN03. DATA DIVISION. WORKING-STORAGE SECTION. 01 DATA-AREA PIC X(100). 01 DATA-LENGTH PIC S9(4) COMP VALUE 100. 01 RESPONSE-CODE PIC S9(8) COMP. 01 RETRY-COUNT PIC S9(2) COMP VALUE 0. 01 MAX-RETRIES PIC S9(2) COMP VALUE 3. 01 MEMORY-FREE-SUCCESSFUL PIC X(1) VALUE 'N'. PROCEDURE DIVISION. PERFORM FREE-MEMORY-WITH-RETRY EXEC CICS RETURN END-EXEC. FREE-MEMORY-WITH-RETRY. PERFORM FREE-MEMORY IF RESPONSE-CODE NOT = DFHRESP(NORMAL) AND RETRY-COUNT < MAX-RETRIES ADD 1 TO RETRY-COUNT DISPLAY 'Retry ' RETRY-COUNT ' memory free operation' PERFORM FREE-MEMORY-WITH-RETRY END-IF. FREE-MEMORY. EXEC CICS FREEMAIN DATA(DATA-AREA) LENGTH(DATA-LENGTH) RESP(RESPONSE-CODE) END-EXEC EVALUATE RESPONSE-CODE WHEN DFHRESP(NORMAL) MOVE 'Y' TO MEMORY-FREE-SUCCESSFUL DISPLAY 'Memory free operation successful' WHEN DFHRESP(NOTAUTH) DISPLAY 'Not authorized to free memory' WHEN DFHRESP(INVREQ) DISPLAY 'Invalid memory free request' WHEN DFHRESP(MEMORYERR) DISPLAY 'Memory free operation error' WHEN DFHRESP(MEMORYNOTFOUND) DISPLAY 'Memory not found' WHEN DFHRESP(MEMORYINUSE) DISPLAY 'Memory is in use' WHEN OTHER DISPLAY 'Unexpected memory free error' END-EVALUATE.
Think of CICS FREEMAIN like putting away your memory toys:
Create a program that frees basic memory.
Write a program that manages multiple memory deallocations.
Implement comprehensive error handling for memory deallocation failures.