Reset the receive buffer processing the received PDU.
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 20 Oct 2013 20:16:45 +0000 (13:16 -0700)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 20 Oct 2013 20:16:45 +0000 (13:16 -0700)
This allows us to have recursive eventloops and do synchronous
rpc calls from a callback.

lib/socket.c

index 8dc3ed2d6b0d5a9fc1a5d731f2cd96bd3ad0d48c..c5068bae24ea754e4bbbf787a2fa44ca17d721e6 100644 (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;