From 13e380343c0eec96a723e7407d59fb7f5d20aba0 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Mon, 2 Jan 2017 17:35:49 -0800 Subject: Fixes to enable REQ/REP to operate. This uncovered a few problems - inproc was not moving the headers to the body on transmit, and the message chunk allocator had a serious bug leading to memory corruption. I've also added a message dumper, which turns out to be incredibly useful during debugging. --- src/protocol/pair/pair.c | 2 ++ src/protocol/reqrep/rep.c | 3 ++- src/protocol/reqrep/req.c | 3 +-- 3 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src/protocol') diff --git a/src/protocol/pair/pair.c b/src/protocol/pair/pair.c index 1d4e58d0..cc906791 100644 --- a/src/protocol/pair/pair.c +++ b/src/protocol/pair/pair.c @@ -91,9 +91,11 @@ static void nni_pair_pipe_fini(void *arg) { nni_pair_pipe *pp = arg; + NNI_FREE_STRUCT(pp); } + static int nni_pair_pipe_add(void *arg) { diff --git a/src/protocol/reqrep/rep.c b/src/protocol/reqrep/rep.c index 60346390..96413523 100644 --- a/src/protocol/reqrep/rep.c +++ b/src/protocol/reqrep/rep.c @@ -263,7 +263,7 @@ nni_rep_pipe_recv(void *arg) for (;;) { size_t len; - char *body; + uint8_t *body; int hops; again: @@ -299,6 +299,7 @@ again: goto again; } nni_msg_trim(msg, 4); + body = nni_msg_body(msg, &len); if (end) { break; } diff --git a/src/protocol/reqrep/req.c b/src/protocol/reqrep/req.c index b8401107..9cfc6f54 100644 --- a/src/protocol/reqrep/req.c +++ b/src/protocol/reqrep/req.c @@ -308,7 +308,6 @@ nni_req_sendfilter(void *arg, nni_msg *msg) { nni_req_sock *req = arg; uint32_t id; - uint8_t buf[4]; nni_mtx_lock(&req->mx); if (req->raw) { @@ -329,7 +328,7 @@ nni_req_sendfilter(void *arg, nni_msg *msg) req->reqid[2] = (uint8_t) (id >> 8); req->reqid[3] = (uint8_t) (id); - if (nni_msg_append_header(msg, buf, 4) != 0) { + if (nni_msg_append_header(msg, req->reqid, 4) != 0) { // Should be ENOMEM. nni_mtx_unlock(&req->mx); nni_msg_free(msg); -- cgit v1.2.3-70-g09d2