From b9d6e0c879feb9d86cdadf4072a7ebeb5eb29798 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Tue, 12 Oct 2010 03:54:31 +0000 Subject: rpc-transport/socket: initialize fragcurrent pointer in correct state while reading vectored replies. - If fragcurrent is initialized in the same state which reads payload data, there is a possibility of it getting reset during partial reads from socket. Hence it should be initialized just before entering the state which reads payload data. Signed-off-by: Raghavendra G Signed-off-by: Vijay Bellur BUG: 1929 (different value is logged for read header size for multiple reads) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1929 --- rpc/rpc-transport/socket/src/socket.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index 6289e7559..00b7dd5e5 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -1024,9 +1024,6 @@ __socket_read_accepted_successful_reply (rpc_transport_t *this) priv->incoming.frag.call_body.reply.accepted_success_state = SP_STATE_READ_PROC_HEADER; - /* fall through */ - - case SP_STATE_READ_PROC_HEADER: if (priv->incoming.payload_vector.iov_base == NULL) { iobuf = iobuf_get (this->ctx->iobuf_pool); if (iobuf == NULL) { @@ -1053,6 +1050,9 @@ __socket_read_accepted_successful_reply (rpc_transport_t *this) priv->incoming.frag.fragcurrent = priv->incoming.payload_vector.iov_base; + /* fall through */ + + case SP_STATE_READ_PROC_HEADER: /* now read the entire remaining msg into new iobuf */ ret = __socket_read_simple_msg (this); if ((ret == -1) -- cgit