From a1e7acc93a416fec6b87cc5601a9922759156771 Mon Sep 17 00:00:00 2001 From: Krutika Dhananjay Date: Fri, 21 Dec 2018 09:58:16 +0530 Subject: socket: Remove redundant in_lock in incoming message handling A given epoll thread can handle only one incoming (POLLIN) request. And until the socket is rearmed for listening, it is guaranteed that there won't be any new incoming requests. As a result, the priv->in_lock which guards the socket proto state machine seems redundant. This patch removes priv->in_lock. Change-Id: I26b6ddd852aba8c10385833b85ffd2e53e46cb8c updates: bz#1467614 Signed-off-by: Krutika Dhananjay --- rpc/rpc-transport/socket/src/socket.c | 40 ++++------------------------------- rpc/rpc-transport/socket/src/socket.h | 1 - 2 files changed, 4 insertions(+), 37 deletions(-) diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index b3f90079c3c..c10a8791d32 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -1304,7 +1304,6 @@ socket_event_poll_err(rpc_transport_t *this, int gen, int idx) priv = this->private; - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { if ((priv->gen == gen) && (priv->idx == idx) && (priv->sock != -1)) { @@ -1314,7 +1313,6 @@ socket_event_poll_err(rpc_transport_t *this, int gen, int idx) } } pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); if (socket_closed) { pthread_mutex_lock(&priv->notify.lock); @@ -2164,12 +2162,8 @@ __socket_read_reply(rpc_transport_t *this) * and priv->lock, since we are doing an upcall here. */ frag->state = SP_STATE_NOTIFYING_XID; - pthread_mutex_unlock(&priv->in_lock); - { - ret = rpc_transport_notify(this, RPC_TRANSPORT_MAP_XID_REQUEST, - in->request_info); - } - pthread_mutex_lock(&priv->in_lock); + ret = rpc_transport_notify(this, RPC_TRANSPORT_MAP_XID_REQUEST, + in->request_info); /* Transition back to externally visible state. */ frag->state = SP_STATE_READ_MSGTYPE; @@ -2485,19 +2479,11 @@ static int socket_proto_state_machine(rpc_transport_t *this, rpc_transport_pollin_t **pollin) { - socket_private_t *priv = NULL; - int ret = 0; + int ret = -1; GF_VALIDATE_OR_GOTO("socket", this, out); - GF_VALIDATE_OR_GOTO("socket", this->private, out); - - priv = this->private; - pthread_mutex_lock(&priv->in_lock); - { - ret = __socket_proto_state_machine(this, pollin); - } - pthread_mutex_unlock(&priv->in_lock); + ret = __socket_proto_state_machine(this, pollin); out: return ret; @@ -2557,7 +2543,6 @@ socket_connect_finish(rpc_transport_t *this) priv = this->private; - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { if (priv->connected != 0) @@ -2606,7 +2591,6 @@ socket_connect_finish(rpc_transport_t *this) } unlock: pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); if (notify_rpc) { rpc_transport_notify(this, event, this); @@ -2882,14 +2866,12 @@ socket_event_handler(int fd, int idx, int gen, void *data, int poll_in, priv = this->private; ctx = this->ctx; - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { priv->idx = idx; priv->gen = gen; } pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); gf_log(this->name, GF_LOG_TRACE, "%s (sock:%d) in:%d, out:%d, err:%d", (priv->is_server ? "server" : "client"), priv->sock, poll_in, @@ -3228,13 +3210,11 @@ socket_disconnect(rpc_transport_t *this, gf_boolean_t wait) priv = this->private; - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { ret = __socket_disconnect(this); } pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); out: return ret; @@ -3335,7 +3315,6 @@ socket_connect(rpc_transport_t *this, int port) goto err; } - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { if (priv->sock != -1) { @@ -3564,7 +3543,6 @@ socket_connect(rpc_transport_t *this, int port) sock = priv->sock; } pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); err: /* if sock != -1, then cleanup is done from the event handler */ @@ -3616,13 +3594,11 @@ socket_listen(rpc_transport_t *this) myinfo = &this->myinfo; ctx = this->ctx; - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { sock = priv->sock; } pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); if (sock != -1) { gf_log_callingfn(this->name, GF_LOG_DEBUG, "already listening"); @@ -3635,7 +3611,6 @@ socket_listen(rpc_transport_t *this) return ret; } - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { if (priv->sock != -1) { @@ -3744,7 +3719,6 @@ socket_listen(rpc_transport_t *this) } unlock: pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); out: return ret; @@ -3909,7 +3883,6 @@ socket_throttle(rpc_transport_t *this, gf_boolean_t onoff) will never read() any more data until throttling is turned off. */ - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { /* Throttling is useless on a disconnected transport. In fact, @@ -3922,7 +3895,6 @@ socket_throttle(rpc_transport_t *this, gf_boolean_t onoff) priv->idx, (int)!onoff, -1); } pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); return 0; } @@ -4431,7 +4403,6 @@ socket_init(rpc_transport_t *this) memset(priv, 0, sizeof(*priv)); this->private = priv; - pthread_mutex_init(&priv->in_lock, NULL); pthread_mutex_init(&priv->out_lock, NULL); pthread_mutex_init(&priv->cond_lock, NULL); pthread_cond_init(&priv->cond, NULL); @@ -4596,18 +4567,15 @@ fini(rpc_transport_t *this) priv = this->private; if (priv) { if (priv->sock != -1) { - pthread_mutex_lock(&priv->in_lock); pthread_mutex_lock(&priv->out_lock); { __socket_ioq_flush(this); __socket_reset(this); } pthread_mutex_unlock(&priv->out_lock); - pthread_mutex_unlock(&priv->in_lock); } gf_log(this->name, GF_LOG_TRACE, "transport %p destroyed", this); - pthread_mutex_destroy(&priv->in_lock); pthread_mutex_destroy(&priv->out_lock); pthread_mutex_destroy(&priv->cond_lock); pthread_cond_destroy(&priv->cond); diff --git a/rpc/rpc-transport/socket/src/socket.h b/rpc/rpc-transport/socket/src/socket.h index 9cbb2a89a22..32339d362d2 100644 --- a/rpc/rpc-transport/socket/src/socket.h +++ b/rpc/rpc-transport/socket/src/socket.h @@ -208,7 +208,6 @@ typedef struct { struct ioq *ioq_prev; }; }; - pthread_mutex_t in_lock; pthread_mutex_t out_lock; pthread_mutex_t cond_lock; pthread_cond_t cond; -- cgit