--- libaitrpc/src/srv.c 2015/06/24 23:02:28 1.26.2.4 +++ libaitrpc/src/srv.c 2015/06/25 22:39:05 1.26.2.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.26.2.4 2015/06/24 23:02:28 misho Exp $ +* $Id: srv.c,v 1.26.2.5 2015/06/25 22:39:05 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -212,8 +212,6 @@ txPacket(sched_task_t *task) /* Go Encapsulate variables */ ret = ait_vars2buffer(buf + wlen, AIT_LEN(&c->cli_buf) - wlen, RPC_RETVARS(c)); - /* Free return values */ - ait_freeVars(&c->cli_vars); if (ret == -1) { rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); @@ -225,6 +223,9 @@ txPacket(sched_task_t *task) } } + /* Free return values */ + ait_freeVars(&c->cli_vars); + rpc->call_len = htonl(wlen); rpc->call_io = RPC_ACK; @@ -303,6 +304,7 @@ execCall(sched_task_t *task) rpc->call_rep.eno = RPC_ERROR(rpc_Errno); } rpc->call_argc ^= rpc->call_argc; + ait_freeVars(&c->cli_vars); } else { rpc->call_rep.eno ^= rpc->call_rep.eno; if (argc) { @@ -501,8 +503,6 @@ txUDPPacket(sched_task_t *task) /* Go Encapsulate variables */ ret = ait_vars2buffer(buf + wlen, AIT_LEN(&c->cli_buf) - wlen, RPC_RETVARS(c)); - /* Free return values */ - ait_freeVars(&c->cli_vars); if (ret == -1) { rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); rpc->call_argc ^= rpc->call_argc; @@ -513,6 +513,9 @@ txUDPPacket(sched_task_t *task) } } + /* Free return values */ + ait_freeVars(&c->cli_vars); + rpc->call_len = htonl(wlen); rpc->call_io = RPC_ACK; @@ -693,8 +696,6 @@ txRAWPacket(sched_task_t *task) /* Go Encapsulate variables */ ret = ait_vars2buffer(buf + wlen, AIT_LEN(&c->cli_buf) - wlen, RPC_RETVARS(c)); - /* Free return values */ - ait_freeVars(&c->cli_vars); if (ret == -1) { rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); rpc->call_argc ^= rpc->call_argc; @@ -705,6 +706,9 @@ txRAWPacket(sched_task_t *task) } } + /* Free return values */ + ait_freeVars(&c->cli_vars); + rpc->call_len = htonl(wlen); rpc->call_io = RPC_ACK; @@ -866,8 +870,6 @@ txBPFPacket(sched_task_t *task) /* Go Encapsulate variables */ ret = ait_vars2buffer(buf + wlen, AIT_LEN(&c->cli_buf) - wlen, RPC_RETVARS(c)); - /* Free return values */ - ait_freeVars(&RPC_RETVARS(c)); if (ret == -1) { rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); rpc->call_argc ^= rpc->call_argc; @@ -878,6 +880,9 @@ txBPFPacket(sched_task_t *task) } } + /* Free return values */ + ait_freeVars(&RPC_RETVARS(c)); + rpc->call_len = htonl(wlen); rpc->call_io = RPC_ACK; @@ -1036,8 +1041,6 @@ txEXTPacket(sched_task_t *task) /* Go Encapsulate variables */ ret = ait_vars2buffer(buf + wlen, AIT_LEN(&c->cli_buf) - wlen, RPC_RETVARS(c)); - /* Free return values */ - ait_freeVars(&RPC_RETVARS(c)); if (ret == -1) { rpc_SetErr(EBADRPC, "Prepare RPC packet failed"); rpc->call_argc ^= rpc->call_argc; @@ -1047,6 +1050,9 @@ txEXTPacket(sched_task_t *task) wlen += ret; } } + + /* Free return values */ + ait_freeVars(&RPC_RETVARS(c)); rpc->call_len = htonl(wlen); rpc->call_io = RPC_ACK;