]> rtime.felk.cvut.cz Git - frescor/forb.git/commitdiff
Inter-executor invocation bugs fixed.
authorPetr Benes <benesp16@fel.cvut.cz>
Fri, 11 Feb 2011 14:35:55 +0000 (15:35 +0100)
committerPetr Benes <benesp16@fel.cvut.cz>
Fri, 11 Feb 2011 14:35:55 +0000 (15:35 +0100)
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/iop.c
src/request.c
src/tests/executor/executor_test.c

index cd2aab221e939f0046cdf4bd75b7e62a6dbbdd9a..1115c1f3b064999f0ddfdc79620a6b98d47fca2b 100644 (file)
--- a/src/iop.c
+++ b/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;
index 65ccdf8957765c47118ac82ac82a350baf8537c3..53ec150a9dbb51454b1b754313e311c0503c1672 100644 (file)
@@ -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);
 }
 
index 5addbc83977c8ea6b1ddd2437cd3f74536df3b6f..2049a5c107502103bb1186ee0e60d9cc67af1a1b 100644 (file)
@@ -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 */