diff options
| -rw-r--r-- | rpc/rpc-lib/src/rpc-transport.c | 6 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server-helpers.c | 10 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server.c | 70 | 
3 files changed, 57 insertions, 29 deletions
diff --git a/rpc/rpc-lib/src/rpc-transport.c b/rpc/rpc-lib/src/rpc-transport.c index 8a3b839c497..78d1bff5779 100644 --- a/rpc/rpc-lib/src/rpc-transport.c +++ b/rpc/rpc-lib/src/rpc-transport.c @@ -326,7 +326,7 @@ rpc_transport_load (glusterfs_ctx_t *ctx, dict_t *options, char *trans_name)  		goto fail;  	} -	return_trans = trans; +        return_trans = trans;          if (name) {                  GF_FREE (name); @@ -470,7 +470,7 @@ rpc_transport_unref (rpc_transport_t *this)  	pthread_mutex_lock (&this->lock);  	{ -		refcount = --this->refcount; +                refcount = --this->refcount;  	}  	pthread_mutex_unlock (&this->lock); @@ -478,7 +478,7 @@ rpc_transport_unref (rpc_transport_t *this)                  if (this->mydata)                          this->notify (this, this->mydata, RPC_TRANSPORT_CLEANUP,                                        NULL); -		rpc_transport_destroy (this); +                rpc_transport_destroy (this);  	}  	ret = 0; diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c index 7613912e137..40b1efc9b95 100644 --- a/xlators/protocol/server/src/server-helpers.c +++ b/xlators/protocol/server/src/server-helpers.c @@ -1370,10 +1370,14 @@ gf_server_check_getxattr_cmd (call_frame_t *frame, const char *key)          if (fnmatch ("*list*mount*point*", key, 0) == 0) {                  /* list all the client protocol connecting to this process */ -                list_for_each_entry (xprt, &conf->xprt_list, list) { -                        gf_log ("mount-point-list", GF_LOG_INFO, -                                "%s", xprt->peerinfo.identifier); +                pthread_mutex_lock (&conf->mutex); +                { +                        list_for_each_entry (xprt, &conf->xprt_list, list) { +                                gf_log ("mount-point-list", GF_LOG_INFO, +                                        "%s", xprt->peerinfo.identifier); +                        }                  } +                pthread_mutex_unlock (&conf->mutex);          }          /* Add more options/keys here */ diff --git a/xlators/protocol/server/src/server.c b/xlators/protocol/server/src/server.c index b75ad172e6f..f87e371f1bb 100644 --- a/xlators/protocol/server/src/server.c +++ b/xlators/protocol/server/src/server.c @@ -298,28 +298,40 @@ server_priv_to_dict (xlator_t *this, dict_t *dict)                  return 0;          //TODO: Dump only specific info to dict -        list_for_each_entry (xprt, &conf->xprt_list, list) { -                peerinfo = &xprt->peerinfo; -                memset (key, 0, sizeof (key)); -                snprintf (key, sizeof (key), "client%d.hostname", count); -                ret = dict_set_str (dict, key, peerinfo->identifier); -                if (ret) -                        goto out; +        pthread_mutex_lock (&conf->mutex); +        { +                list_for_each_entry (xprt, &conf->xprt_list, list) { +                        peerinfo = &xprt->peerinfo; +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key), "client%d.hostname", +                                  count); +                        ret = dict_set_str (dict, key, peerinfo->identifier); +                        if (ret) +                                goto unlock; -                memset (key, 0, sizeof (key)); -                snprintf (key, sizeof (key), "client%d.bytesread", count); -                ret = dict_set_uint64 (dict, key, xprt->total_bytes_read); -                if (ret) -                        goto out; +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key), "client%d.bytesread", +                                  count); +                        ret = dict_set_uint64 (dict, key, +                                               xprt->total_bytes_read); +                        if (ret) +                                goto unlock; -                memset (key, 0, sizeof (key)); -                snprintf (key, sizeof (key), "client%d.byteswrite", count); -                ret = dict_set_uint64 (dict, key, xprt->total_bytes_write); -                if (ret) -                        goto out; +                        memset (key, 0, sizeof (key)); +                        snprintf (key, sizeof (key), "client%d.byteswrite", +                                  count); +                        ret = dict_set_uint64 (dict, key, +                                               xprt->total_bytes_write); +                        if (ret) +                                goto unlock; -                count++; +                        count++; +                }          } +unlock: +        pthread_mutex_unlock (&conf->mutex); +        if (ret) +                goto out;          ret = dict_set_int32 (dict, "clientcount", count); @@ -343,10 +355,14 @@ server_priv (xlator_t *this)          if (!conf)                  return 0; -        list_for_each_entry (xprt, &conf->xprt_list, list) { -                total_read  += xprt->total_bytes_read; -                total_write += xprt->total_bytes_write; +        pthread_mutex_lock (&conf->mutex); +        { +                list_for_each_entry (xprt, &conf->xprt_list, list) { +                        total_read  += xprt->total_bytes_read; +                        total_write += xprt->total_bytes_write; +                }          } +        pthread_mutex_unlock (&conf->mutex);          gf_proc_dump_build_key(key, "server", "total-bytes-read");          gf_proc_dump_write(key, "%"PRIu64, total_read); @@ -613,7 +629,11 @@ server_rpc_notify (rpcsvc_t *rpc, void *xl, rpcsvc_event_t event,                  */                  INIT_LIST_HEAD (&xprt->list); -                list_add_tail (&xprt->list, &conf->xprt_list); +                pthread_mutex_lock (&conf->mutex); +                { +                        list_add_tail (&xprt->list, &conf->xprt_list); +                } +                pthread_mutex_unlock (&conf->mutex);                  break;          } @@ -625,7 +645,11 @@ server_rpc_notify (rpcsvc_t *rpc, void *xl, rpcsvc_event_t event,                  put_server_conn_state (this, xprt);                  gf_log (this->name, GF_LOG_INFO, "disconnecting connection"                          "from %s", xprt->peerinfo.identifier); -                list_del (&xprt->list); +                pthread_mutex_lock (&conf->mutex); +                { +                        list_del (&xprt->list); +                } +                pthread_mutex_unlock (&conf->mutex);                  pthread_mutex_lock (&conn->lock);                  {  | 
