diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2020-05-22 15:06:57 +0300 |
---|---|---|
committer | MOHIT AGRAWAL <moagrawa@redhat.com> | 2020-06-03 03:06:44 +0000 |
commit | cab995fd9a66083a7b8f591105f3a6d550571496 (patch) | |
tree | 58cff35941ca87c19c11eba1d4bac43228886286 /rpc | |
parent | 443e8d8e6fe8c12f6872717710855390a584ef53 (diff) |
rpc, gf_attach: add minimal proper synchronization
Implement minimal proper synchronization between gf_attach
and underlying RPC layer using convenient POSIX primitives.
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Fixes: #1260
Change-Id: Ib5130b586a8b65ed5cf5f9156c111b161570224b
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.c | 3 | ||||
-rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.h | 1 |
2 files changed, 4 insertions, 0 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c index dac707664df..04b77501489 100644 --- a/rpc/rpc-lib/src/rpc-clnt.c +++ b/rpc/rpc-lib/src/rpc-clnt.c @@ -960,6 +960,7 @@ rpc_clnt_notify(rpc_transport_t *trans, void *mydata, conn->config.remote_port = 0; conn->connected = 1; conn->disconnected = 0; + pthread_cond_broadcast(&conn->cond); } pthread_mutex_unlock(&conn->lock); @@ -1005,6 +1006,7 @@ rpc_clnt_connection_init(struct rpc_clnt *clnt, glusterfs_ctx_t *ctx, conn = &clnt->conn; pthread_mutex_init(&clnt->conn.lock, NULL); + pthread_cond_init(&clnt->conn.cond, NULL); conn->name = gf_strdup(name); if (!conn->name) { @@ -1830,6 +1832,7 @@ rpc_clnt_destroy(struct rpc_clnt *rpc) saved_frames_destroy(saved_frames); pthread_mutex_destroy(&rpc->lock); pthread_mutex_destroy(&rpc->conn.lock); + pthread_cond_destroy(&rpc->conn.cond); /* mem-pool should be destroyed, otherwise, it will cause huge memory leaks */ diff --git a/rpc/rpc-lib/src/rpc-clnt.h b/rpc/rpc-lib/src/rpc-clnt.h index 0d0b115578c..2945265200b 100644 --- a/rpc/rpc-lib/src/rpc-clnt.h +++ b/rpc/rpc-lib/src/rpc-clnt.h @@ -127,6 +127,7 @@ struct rpc_clnt_config { struct rpc_clnt_connection { pthread_mutex_t lock; + pthread_cond_t cond; rpc_transport_t *trans; struct rpc_clnt_config config; gf_timer_t *reconnect; |