Reset the receive buffer processing the received PDU.

This allows us to have recursive eventloops and do synchronous
rpc calls from a callback.
libnfs-4.0.0-vitalif
Ronnie Sahlberg 2013-10-20 13:16:45 -07:00
parent c81e7d8921
commit dd97d43aad
1 changed files with 7 additions and 6 deletions

View File

@ -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;