diff options
Diffstat (limited to 'rpc')
| -rw-r--r-- | rpc/rpc-transport/rdma/src/rdma.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c index 27a64d86ead..0f9699d09ba 100644 --- a/rpc/rpc-transport/rdma/src/rdma.c +++ b/rpc/rpc-transport/rdma/src/rdma.c @@ -3493,7 +3493,8 @@ rdma_send_completion_proc (void *data)                                  if ((ret == 0)                                      && (wc.status == IBV_WC_SUCCESS)                                      && !is_request -                                    && (post->type == RDMA_SEND_POST)) { +                                    && (post->type == RDMA_SEND_POST) +                                    && (peer != NULL)) {                                          /* An RDMA_RECV_POST can end up in                                           * rdma_send_completion_proc for                                            * rdma-reads, and we do not take @@ -4226,7 +4227,7 @@ rdma_handshake_pollerr (rpc_transport_t *this)  {          rdma_private_t *priv = this->private;          int32_t ret = 0; -        char need_unref = 0; +        char need_unref = 0, connected = 0;          gf_log (RDMA_LOG_NAME, GF_LOG_DEBUG,                  "%s: peer disconnected, cleaning up", @@ -4236,6 +4237,7 @@ rdma_handshake_pollerr (rpc_transport_t *this)          {                  __rdma_teardown (this); +                connected = priv->connected;                  if (priv->sock != -1) {                          event_unregister (this->ctx->event_pool,                                             priv->sock, priv->idx); @@ -4267,7 +4269,9 @@ rdma_handshake_pollerr (rpc_transport_t *this)          }          pthread_mutex_unlock (&priv->write_mutex); -        rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this); +        if (connected) { +                rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this); +        }          if (need_unref)                  rpc_transport_unref (this);  | 
