for( ; ops->meta_ops_num && ops->meta_ops_num != meta_ops_num; ops ++ )
;
if( !ops->meta_ops_num ) {
- LEAVE('-');
+// LEAVE('-');
return ;
}
mei_op = &ops->op_template_list[vec_idx-1];
// Check call type
udi_op_t *const*ops = UDI_int_ChannelPrepForCall(gcb, metalang, meta_ops_num);
udi_op_t *op = ops[vec_idx];
+
+ // Change ownership of chained cbs
+ size_t chain_ofs = metalang->CbTypes[cb_type].ChainOfs;
+ if( chain_ofs )
+ {
+ udi_cb_t *chained_cb = gcb;
+ while( (chained_cb = *(udi_cb_t**)((void*)chained_cb + chain_ofs)) )
+ UDI_int_ChannelFlip(chained_cb);
+ }
+
if( indirect_call )
{
va_list args;
va_start(args, vec_idx);
size_t marshal_size = _udi_marshal_values(NULL, mei_op->marshal_layout, args);
+ if( marshal_size == 0 && mei_op->marshal_layout[0] != UDI_DL_END ) {
+ Warning("udi_mei_call(%s) - Marshalling failure", mei_op->op_name);
+// LEAVE('-');
+ return ;
+ }
va_end(args);
tUDI_MeiCall *call = malloc(sizeof(tUDI_MeiCall) + marshal_size);
call->DCall.Next = NULL;