diff options
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index 81187eeca17..8539209805a 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -139,7 +139,7 @@ ssl_setup_connection_params(rpc_transport_t *this); \ gf_log(this->name, GF_LOG_TRACE, \ "partial read on non-blocking socket"); \ - \ + ret = 0; \ break; \ } \ } @@ -1417,6 +1417,7 @@ __socket_read_simple_msg(rpc_transport_t *this) if (ret > 0) { gf_log(this->name, GF_LOG_TRACE, "partial read on non-blocking socket."); + ret = 0; break; } @@ -1704,6 +1705,7 @@ __socket_read_accepted_successful_reply(rpc_transport_t *this) XDR xdr; struct gf_sock_incoming *in = NULL; struct gf_sock_incoming_frag *frag = NULL; + uint32_t remaining_size = 0; GF_VALIDATE_OR_GOTO("socket", this, out); GF_VALIDATE_OR_GOTO("socket", this->private, out); @@ -1807,7 +1809,9 @@ __socket_read_accepted_successful_reply(rpc_transport_t *this) case SP_STATE_READ_PROC_HEADER: /* now read the entire remaining msg into new iobuf */ ret = __socket_read_simple_msg(this); - if ((ret == -1) || ((ret == 0) && RPC_LASTFRAG(in->fraghdr))) { + remaining_size = RPC_FRAGSIZE(in->fraghdr) - frag->bytes_read; + if ((ret == -1) || ((ret == 0) && (remaining_size == 0) && + RPC_LASTFRAG(in->fraghdr))) { frag->call_body.reply.accepted_success_state = SP_STATE_ACCEPTED_SUCCESS_REPLY_INIT; } @@ -1833,6 +1837,7 @@ __socket_read_accepted_successful_reply_v2(rpc_transport_t *this) XDR xdr; struct gf_sock_incoming *in = NULL; struct gf_sock_incoming_frag *frag = NULL; + uint32_t remaining_size = 0; GF_VALIDATE_OR_GOTO("socket", this, out); GF_VALIDATE_OR_GOTO("socket", this->private, out); @@ -1937,7 +1942,9 @@ __socket_read_accepted_successful_reply_v2(rpc_transport_t *this) case SP_STATE_READ_PROC_HEADER: /* now read the entire remaining msg into new iobuf */ ret = __socket_read_simple_msg(this); - if ((ret == -1) || ((ret == 0) && RPC_LASTFRAG(in->fraghdr))) { + remaining_size = RPC_FRAGSIZE(in->fraghdr) - frag->bytes_read; + if ((ret == -1) || ((ret == 0) && (remaining_size == 0) && + RPC_LASTFRAG(in->fraghdr))) { frag->call_body.reply.accepted_success_state = SP_STATE_ACCEPTED_SUCCESS_REPLY_INIT; } @@ -2340,6 +2347,7 @@ __socket_proto_state_machine(rpc_transport_t *this, gf_log(this->name, GF_LOG_TRACE, "partial " "fragment header read"); + ret = 0; goto out; } @@ -2470,10 +2478,6 @@ __socket_proto_state_machine(rpc_transport_t *this, } out: - if ((ret == -1) && (errno == EAGAIN)) { - ret = 0; - } - return ret; } |