Unhandled error from C→M call-in returned to caller after Simple API call that sets a spanning node
Final Release Note
A C→M call-in that encounters an error which is not handled by the error trap handler ($ETRAP
or $ZRAP
) returns the error code back to the calling C code. Previously, in this situation, the process could terminate with a GTMASSERT2 fatal error if the call-in was preceded by a ydb_set_s()
Simple API call that set a node in the database spanning more than one database block. [#352 (closed)]
Description
If a base C program uses the simpleAPI call ydb_set_s() to set a database node that spans multiple GDS blocks and then does a call-in call using ydb_ci() into an M program that encounters a runtime error which is not handled by the $ETRAP handler (i.e. $ecode is still non-null), then the process terminates with a fatal GTMASSERT2 error instead of ydb_ci() returning the unhandled error code back to its caller.
Below is a sample failure symptom. The RPARENMISSING error is displayed by the error trap but as part of returning this error code to the base C program that called ydb_ci(), a GTMASSERT2 error shows up.
Error occurred: 150373642,run+1^select,%YDB-E-RPARENMISSING, Right parenthesis expected
%YDB-F-GTMASSERT2, YottaDB r998 Linux x86_64 - Assert failed sr_unix/error_return.c line 134 for expression (!(SSF_NORET_VIA_MUMTSTART & frame_pointer->flags) || (0 != proc_act_type) || (SFF_ETRAP_ERR & frame_pointer->flags))
Draft Release Note
Call-ins that encounter an error which is not handled by the error trap handler (e.g. $ETRAP) return the error code back to the calling C code. Previously, in this situation, the process could terminate with a GTMASSERT2 fatal error if the call-in was preceded by a ydb_set_s() simpleAPI call that set a node in the database which spanned more than one database block.