&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,
}
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);
+}