From 1dbf452ca258ba9f07bc59ac2cdad00678e337c5 Mon Sep 17 00:00:00 2001 From: Petr Benes Date: Fri, 11 Feb 2011 15:35:55 +0100 Subject: [PATCH] Inter-executor invocation bugs fixed. Double free bug on request codec buffer fixed. Stub index indicating a codec read position for inter-executor invocation fixed. Test application->executor->executor does not fire properly. Needs a bug fix. --- src/forb/src/iop.c | 5 +++-- src/forb/src/request.c | 2 +- src/forb/src/tests/executor/executor_test.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/forb/src/iop.c b/src/forb/src/iop.c index cd2aab22..1115c1f3 100644 --- a/src/forb/src/iop.c +++ b/src/forb/src/iop.c @@ -103,7 +103,6 @@ forb_iop_prepare_request(forb_request_t *req, rh.method_index = req->method_ind; rh.source = forb_object_to_forb(req->obj)->server_id; ret = forb_iop_request_header_serialize(&req->cdr_request, &rh); - *index = req->cdr_request.wptr; if (ret) { /* Request body is 8 byte aligned */ ret = FORB_CDR_put_align(&req->cdr_request, 8); @@ -112,6 +111,7 @@ forb_iop_prepare_request(forb_request_t *req, forb_server_id_to_string(str, &req->obj->server, sizeof(str)), rh.iface, rh.method_index); } + *index = req->cdr_request.wptr; return ret; } @@ -761,7 +761,8 @@ forb_request_send(forb_request_t *req, unsigned index, CORBA_Environment *env) exec_req->method_index = req->method_ind; exec_req->interface = req->interface; req->cdr_request.rptr = index; - exec_req->codec = req->cdr_request; + exec_req->codec = req->cdr_request; + req->cdr_request.release_buffer = CORBA_FALSE; exec_req->request_id = req->request_id; forb_exec_req_ins_tail(forb_object_get_executor(exec_req->obj), exec_req); return; diff --git a/src/forb/src/request.c b/src/forb/src/request.c index 65ccdf89..53ec150a 100644 --- a/src/forb/src/request.c +++ b/src/forb/src/request.c @@ -122,7 +122,7 @@ forb_request_destroy(forb_request_t *req) forb_t *forb = forb_object_to_forb(req->obj); forb_request_delete(forb, req); - FORB_CDR_codec_release_buffer(&req->cdr_request); + //FORB_CDR_codec_release_buffer(&req->cdr_request); forb_syncobj_destroy(&req->reply_ready); } diff --git a/src/forb/src/tests/executor/executor_test.c b/src/forb/src/tests/executor/executor_test.c index 5addbc83..2049a5c1 100644 --- a/src/forb/src/tests/executor/executor_test.c +++ b/src/forb/src/tests/executor/executor_test.c @@ -97,7 +97,7 @@ WVTEST_MAIN("inter_thread_invocation") WVPASS(forb_object_is_local(testobj2)); /* Inter-thread invocation: application->executor */ - WVPASSEQ(executor_test_add(testobj1, 1, &env), 2); + WVPASSEQ(executor_test_add(testobj1, 2, &env), 3); WVFAIL(forb_exception_occurred(&env)); /* Inter-thread invocation: (application->)executor->executor */ -- 2.39.2