From: Ronnie Sahlberg Date: Sun, 20 Oct 2013 20:16:45 +0000 (-0700) Subject: Reset the receive buffer processing the received PDU. X-Git-Tag: upstream/1.9.6^2~187 X-Git-Url: https://git.piment-noir.org/?p=deb_libnfs.git;a=commitdiff_plain;h=dd97d43aadb67b7d71332f06e067b16be4f0867d Reset the receive buffer processing the received PDU. This allows us to have recursive eventloops and do synchronous rpc calls from a callback. --- 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;