/* fprintf(of, " return "FORB_RETVAL_VAR_NAME";\n"); */
/* } */
fprintf(of, " if (ev) ev->major = FORB_EX_NONE;\n");
- fprintf(of, " if (forb_object_is_local(_obj)) {\n");
+ fprintf(of, " if (forb_object_is_local(_obj) &&\n"
+ "forb_get_current_executor() == forb_object_get_executor(_obj)) {\n");
fprintf(of, " if (!_obj->interface ||\n"
" strncmp(_obj->interface->name, \"%s\", %zd) != 0) {\n"
" ev->major = FORB_EX_BAD_OPERATION;\n"
fprintf(of, " } else {\n");
fprintf(of, " /* remote object */\n"
- " forb_request_t req;\n");
- fprintf(of, " ex_on_fail(forb_request_init(&req, _obj) == 0, FORB_EX_INTERNAL);\n");
- fprintf(of, " forb_iop_prepare_request(&req, \"%s\", FORB_METHOD_INDEX(%s), ev);\n",
+ " forb_request_t req;\n"
+ " unsigned index; //buffer position of parameters\n");
+ fprintf(of, " ex_on_fail(forb_request_init(&req, _obj, \"%s\", FORB_METHOD_INDEX(%s)) == 0, FORB_EX_INTERNAL);\n",
iface_id, opname);
+ fprintf(of, " forb_iop_prepare_request(&req, &index, ev);\n");
fprintf(of, " if (forb_exception_occurred(ev)) goto exception;\n");
for (sub = IDL_OP_DCL (tree).parameter_dcls; sub; sub = IDL_LIST (sub).next) {
IDL_tree parm = IDL_LIST (sub).data;
n == 0 ? "&":"", name);
}
}
- fprintf(of, " forb_request_send(&req, ev);\n");
+ fprintf(of, " forb_request_send(&req, index, ev);\n");
fprintf(of, " if (forb_exception_occurred(ev)) goto exception;\n");
fprintf(of, " forb_request_wait_for_reply(&req);\n");
fprintf(of, " if (forb_exception_occurred(ev)) goto exception;\n");