You have a CSMI transaction that hangs indefinitely waiting for a record lock ENQUEUE FCDSRECD. The owner of the record lock is a different CSMI transaction. You are using distributed program link (DPL).
The same record is being updated twice by two different tasks in the same network-wide unit of work (UOW). Therefore, the lock is never released. See Multiple updates to a recoverable resource by the same distributed UOW in the CICS Transaction Server for z/OS (CICS TS) V4.2 information center for an explanation of why CICS does not release the lock.
Diagnosing the problem
Following is an example of the sequence of events that lead up to the hang:
Region Tran Task#
1. RGN1 TRN1 00001 function ships request to update record on RGN2
2. RGN2 CSMI 00002 updates record and holds FCDSRECD lock
3. RGN1 TRN1 00001 issues DPL request to RGN3
4. RGN3 CSMI 00003 issues DPL request to RGN1
5. RGN1 CSMI 00004 function ships request to update same record on RGN2
6. RGN2 CSMI 00005 suspended waiting FCDSRECD
7. RGN2 CSMI 00002 owns the lock, same network UOW but different task
In a CICS system dump for region RGN2 you would see the following:
IPCS command verbx dfhpdxxx 'ds=3' where xxx is the release of CICS such as 670 for CICS TS V.42, shows CSMI transaction (task# 00005) waiting for resource ENQUEUE FCDSRECD.
verbx dfhpdxxx 'nq=3' shows the owner of the record lock is task# 00002 under the ENQUEUE POOL SUMMARY - FCDSRECD. The first part of the ENQUEUE name is the address of the data set name block (DSNB) of the file being updated.
verbx dfhpdxxx 'rm=3' shows the same network UOW Id for both the task holding the lock and the task trying get the lock. To determine this, get the UOW Address (RMUW ) from the Unit of Work Summary for the two tasks. Then, find the RMUW for each task. The Network UOW Id is on the title line for the RMUW. For example, RMUW 15A49648 RMUW Unit of Work. Network UOW Id: 1A11E4E2C6C9E2C5F0F14BE3F5F8F8F0F0F3F53400256A2D2C0001.
Resolving the problem
Do one of the following to resolve this problem:
- Add an EXEC CICS SYNCPOINT after the first update and before the DPL request.
- Remove the second update to the same record that is in the same UOW.
- Run all the LINKed to programs in the same CICS region. See SYSID on the EXEC CICS LINK command, and REMOTENAME(program) and REMOTESYSTEM(connection) on the PROGRAM definition.
CICS/TS CICS TS CICS Transaction Server