]> rtime.felk.cvut.cz Git - frescor/frsh-forb.git/blobdiff - src/forb/forb-idl/forb-idl-c-stubs.c
Struct request adjusted for inter-executor invocation.
[frescor/frsh-forb.git] / src / forb / forb-idl / forb-idl-c-stubs.c
index f553283be8ef856bdd7afc1692bad599bf49184d..aecf93a63e1002eeddd0e57984ddd60702c82a34 100644 (file)
@@ -44,7 +44,8 @@ cs_output_stub (IDL_tree     tree,
 /*             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"
@@ -64,10 +65,11 @@ cs_output_stub (IDL_tree     tree,
        
        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;
@@ -84,7 +86,7 @@ cs_output_stub (IDL_tree     tree,
                          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");