A fix is available
APAR status
Closed as program error.
Error description
You issue a CEMT SET TCPIPSERVICE(name) CLOSED command and sometimes it hangs in BEING CLOSED status and the TCPIPSERVICE never closes. A DFHTRAP was written and the following problem was found. The trace shows this socket being created and being closed by the client but it never gets deleted by CICS. Task-01070 is the CWXN task attached when this new socket is created. Task-01071 is the web-alias task which CWXN attaches. After Task-01071 sends its response to the client, it issues an ASYNC receive to accept the next request from the client. Almost immediately after this, the socket listener task gets notified that the client has closed the connection (this can only happen after an ASYNC RECEIVE has been issued). DFHWBSO is called for SOCKET_CLOSED for the socket. In parallel with this, TASK-01071 starts to go through DFHSOCK PERFORM_COMMIT logic. Code in DFHSOCK PERFORM_COMMIT checks the state of this socket. At this point notify_count is non-zero (incremented by CSOL - TASK-00004 as part of notify processing). TASK-01071 therefore deems the socket to be in- use. This causes DFHSOCK PERFORM_COMMIT to eventually bypass its own socket close logic which exists for deleting inactive sockets. Before TASK-01071 can relinquish its reserve on the socket, TASK-00004 issues its own relinquish. Relinquish logic returns a doclose flag which is only set if there are no other reserves on the socket. Relinquish returns doclose= no to TASK-00004 (as TASK-00071 still has a reserve). So TASK-00004 decides that the socket is still active and skips close processing for the socket. It expects the task which currently holds a reserve on the socket (TASK-01071) to eventually close and delete it the socket. This will not happen as explained earlier. So both CSOL and the web-alias task go through logic which will delete the socket if it is deemed to be inactive but both tasks note the presence of the other and assume that the other task will do the close. CICS needs to ensure that one of these 2 tasks closes and deletes the socket when this timing clash occurs. Additional Symptom(s) Search Keyword(s): KIXREVSCB
Local fix
Problem summary
**************************************************************** * USERS AFFECTED: All. * **************************************************************** * PROBLEM DESCRIPTION: CEMT SET TCPIPSERVICE() CLOSED hangs * * in BEING CLOSED. * **************************************************************** * RECOMMENDATION: * **************************************************************** CSOL is performing a notify for the close of a socket which has been requested by the client. At the same time the alias task is terminating and issues sock_perform_commit. Both CSOL and the alias transaction will close and delete the socket if there are no other active users, but due to a specific timing scenario, neither of them do and the socket is left open with no-one left to close it. The TCPIPSERVICE then cannot be closed. The problem will occur if the alias transaction checks the notify_count flag in sock_perform_commit before CSOL has decremented it. It will then set the curr_in_use flag on to indicate that a notify task is still using the socket. If CSOL then gets control and relinquishes the socket, CSOL will detect that the alias task still has a reserve on the socket and so will not close and delete the socket. When the alias task then performs a relinquish of the socket, it should carry on to delete the socket, as CSOL has already relinquished the socket. But because the curr_in_use flag is set it thinks that the socket is still in use by a notify task and does not close / delete the socket either.
Problem conclusion
DFHSOCK has been modified in perform_commit processing to check for the presence of a notify task using the socket, which could prevent closure of the socket, only after the relinquish socket call has been made by the terminating task.
Temporary fix
FIX AVAILABLE BY PTF ONLY
Comments
APAR Information
APAR number
PK60993
Reported component name
CICSTS V3 Z/OS
Reported component ID
5655M1500
Reported release
400
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
YesSpecatt / Pervasive
Submitted date
2008-02-13
Closed date
2008-06-25
Last modified date
2008-07-01
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
UK37671 UK37672
Modules/Macros
DESSOCK DFHSOCK
Fix information
Fixed component name
CICSTS V3 Z/OS
Fixed component ID
5655M1500
Applicable component levels
Fix is available
Select the PTF appropriate for your component level. You will be required to sign in. Distribution on physical media is not available in all countries.
[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSGMGV","label":"CICS Transaction Server"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"3.1","Edition":"","Line of Business":{"code":"LOB35","label":"Mainframe SW"}},{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SG19M","label":"APARs - z\/OS environment"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"3.1","Edition":"","Line of Business":{"code":"","label":""}}]
Document Information
Modified date:
01 July 2008