From dd97d43aadb67b7d71332f06e067b16be4f0867d Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Sun, 20 Oct 2013 13:16:45 -0700 Subject: [PATCH] Reset the receive buffer processing the received PDU. This allows us to have recursive eventloops and do synchronous rpc calls from a callback. --- lib/socket.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/socket.c b/lib/socket.c index 8dc3ed2..c5068ba 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -163,8 +163,6 @@ static int rpc_read_from_socket(struct rpc_context *rpc) assert(rpc->magic == RPC_CONTEXT_MAGIC); - assert(rpc->magic == RPC_CONTEXT_MAGIC); - if (ioctl(rpc->fd, FIONREAD, &available) != 0) { rpc_set_error(rpc, "Ioctl FIONREAD returned error : %d. Closing socket.", errno); return -1; @@ -258,14 +256,17 @@ static int rpc_read_from_socket(struct rpc_context *rpc) rpc->inpos += count; if (rpc->inpos == rpc->insize) { - if (rpc_process_pdu(rpc, rpc->inbuf, pdu_size) != 0) { + char *buf = rpc->inbuf; + + rpc->inbuf = NULL; + rpc->insize = 0; + rpc->inpos = 0; + + if (rpc_process_pdu(rpc, buf, pdu_size) != 0) { rpc_set_error(rpc, "Invalid/garbage pdu received from server. Closing socket"); return -1; } free(rpc->inbuf); - rpc->inbuf = NULL; - rpc->insize = 0; - rpc->inpos = 0; } return 0; -- 2.34.1