--- libaitrpc/src/cli.c 2012/07/22 20:44:13 1.11 +++ libaitrpc/src/cli.c 2012/11/13 09:22:10 1.12 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: cli.c,v 1.11 2012/07/22 20:44:13 misho Exp $ +* $Id: cli.c,v 1.12 2012/11/13 09:22:10 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -154,7 +154,7 @@ rpc_cli_openClient(u_int ProgID, u_char ProcID, int ne if (netBuf < RPC_MIN_BUFSIZ) netBuf = BUFSIZ; else - netBuf = io_align(netBuf, 1); /* align netBuf length */ + netBuf = io_align(netBuf, 2); /* align netBuf length */ #ifdef HAVE_SRANDOMDEV srandomdev(); @@ -379,8 +379,13 @@ rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short /* RPC is OK! Go de-marshaling variables ... */ if (out_vars && ntohs(rpc->call_argc)) { +#ifdef CLI_RES_ZCOPY *out_vars = io_buffer2vars(buf + wlen, AIT_LEN(&cli->cli_buf) - wlen, + ntohs(rpc->call_argc), 42); +#else + *out_vars = io_buffer2vars(buf + wlen, AIT_LEN(&cli->cli_buf) - wlen, ntohs(rpc->call_argc), 0); +#endif if (!*out_vars) { rpc_SetErr(io_GetErrno(), "%s", io_GetError()); return -1; @@ -392,6 +397,22 @@ rpc_cli_execCall(rpc_cli_t *cli, int noreply, u_short } /* + * rpc_cli_freeCall() - Free resouce allocated by RPC call + * + * @out_vars = Returned array with variables from RPC call + * return: none + */ +inline void +rpc_cli_freeCall(array_t ** __restrict out_vars) +{ +#ifdef CLI_RES_ZCOPY + io_arrayDestroy(out_vars); +#else + io_freeVars(out_vars); +#endif +} + +/* * rpc_cli_ping() - Ping RPC server * * @cli = connected client @@ -410,7 +431,7 @@ rpc_cli_ping(rpc_cli_t *cli) return -1; else ret = AIT_GET_U16(io_array(arr, 0, ait_val_t*)); - io_freeVars(&arr); + rpc_cli_freeCall(&arr); return ret; }