]> rtime.felk.cvut.cz Git - frescor/forb.git/blobdiff - src/exec_req.c
Fixed typography.
[frescor/forb.git] / src / exec_req.c
index b9cc5f99062be867e98a837dff578237f6456590..e836dd18b84ccf9b62c87e3d9e2c3ce7eb2c95f2 100644 (file)
@@ -93,11 +93,19 @@ void forb_exec_req_process(forb_exec_req_t *exec_req)
                                         &reply_codec,
                                         exec_req->obj,
                                         &env);
-       
-       forb_iop_send_reply(forb, &exec_req->source,
-                           &reply_codec,
-                           exec_req->request_id, &env);
-       forb_free(exec_req);
+
+       // The local invocation case
+       if ((exec_req->request_type = FORB_EXEC_REQ_LOCAL)) {
+               *(exec_req->input_request->cdr_reply) = reply_codec; //FIXME: better without copying?
+               // notify that the reply is ready
+               forb_syncobj_signal(&exec_req->input_request->reply_ready);
+       } else {
+               forb_iop_send_reply(forb, &exec_req->source,
+                               &reply_codec,
+                               exec_req->request_id, &env);            
+       }
+       FORB_CDR_codec_release_buffer(&reply_codec);
+       forb_exec_req_destroy(exec_req);
 }
 
 void forb_exec_req_ins_tail(forb_executor_t *executor,
@@ -112,3 +120,10 @@ void forb_exec_req_ins_tail(forb_executor_t *executor,
        }
        fosa_mutex_unlock(&executor->mutex);
 }
+
+void forb_exec_req_destroy(forb_exec_req_t *exec_req)
+{
+       forb_object_release(exec_req->obj);
+       FORB_CDR_codec_release_buffer(&exec_req->codec);
+       forb_free(exec_req);
+}