Call-ins permitted inside TP
Final Release Note
Call-ins are allowed even if a TP transaction is active (process is within a TSTART/TCOMMIT fence). Previously, a call-in while already in TP was not permitted, resulting in a CITPNESTED error. (#188 (closed))
Currently if a C-frame C1 calls an M function (using call-ins) M1, it is allowed for M1 to do a TSTART as long as the TCOMMIT happens at the M1 level before returning to C1. But M1 is not allowed to do calls to another C-frame (using external calls) C2 which in turn does a call to another M frame M2. This is because if a restart needs to happen because of a global reference in M2, the M and C stacks have to be unwound in the order M2, C2 and M1. While YDB has control of M2 and M1 and can do the unwind, it has no control of C1. It is in user-defined C code that YDB has no control of. That was the original intent behind disabling the C2 -> M2 call.
But we can do something better. That is to unwind just M2 when a restart happens in M2. And return to C2 and invoke tp restart processing at the C2 level. This would in turn trigger restart processing in M1. Which will then check the TPRESTART pending status and continue the restart processing.
Draft Release Note
Call-ins are now allowed even if a TP transaction (TSTART/TCOMMIT fence) is already active. Previously, a CITPNESTED error would be issued and call-in attempt while already in TP would be disallowed.