Threadsafe restrictions
An open API TRUE must not treat the executing open TCB environment in such a
way that it causes problems for:
v Other open API TRUEs called by the same task
v OPENAPI programs called by the same task
v Application program logic that could run on the open TCB
v Future tasks that might use the open TCB
v CICS management code.
In particular:
v When invoking CICS services, or when returning to CICS, an open API TRUE
must ensure it restores the MVS programming environment as it was on entry to
the TRUE. This includes cross-memory mode, ASC mode, request block (RB)
level, linkage stack level, TCB dispatching priority, in addition to cancelling any
ESTAEs added.
v At CICS task termination, an open API TRUE must ensure it leaves the open
TCB in a state suitable to be reused by another CICS transaction. In particular, it
must ensure that all non-CICS resources acquired specifically on behalf of the
terminating task are freed. Such resources might include:
– Dynamically allocated data sets
– Open ACBs or DCBs
– STIMERM requests
– MVS managed storage
– ENQ requests
– Attached subtasks
– Loaded modules
– Owned data spaces
– Added access list entries
– Name/token pairs
– Fixed pages
– Security settings (TCBSENV must be set to zero)
v An open API TRUE must not use the following MVS system services that will
affect overall CICS operation:
– CHKPT
– ESPIE
– QEDIT
– SPIE
– STIMER
– TTIMER
– XCTL / XCTLX
– Any TSO/E services.
v An open API TRUE must not invoke under the L8 mode TCB a Language
Environment program that is using MVS Language Environment services,
because L8 mode TCBs are initialized for Language Environment using CICS
services.
Calling an OPENAPI task-related user exit
If a task-related user exit is enabled with the OPENAPI option, CICS uses the
following rules, based on the type of call, to determine the TCB on which it should
invoke the TRUE—on the QR TCB, on the caller's TCB, or an L8 mode TCB:
272 Customization Guide