diff options
| -rw-r--r-- | src/kiro-client.c | 32 | ||||
| -rw-r--r-- | test/test-client.c | 5 | 
2 files changed, 31 insertions, 6 deletions
| diff --git a/src/kiro-client.c b/src/kiro-client.c index c4ef9ed..2f0671b 100644 --- a/src/kiro-client.c +++ b/src/kiro-client.c @@ -208,6 +208,12 @@ int  kiro_client_sync (KiroClient *self)  {      KiroClientPrivate *priv = KIRO_CLIENT_GET_PRIVATE (self); + +    if (!priv->conn) { +        g_warning ("Client not connected"); +        return -1; +    } +      struct kiro_connection_context *ctx = (struct kiro_connection_context *)priv->conn->context;      if (rdma_post_read (priv->conn, priv->conn, ctx->rdma_mr->mem, ctx->peer_mr.length, ctx->rdma_mr->mr, 0, ctx->peer_mr.addr, ctx->peer_mr.rkey)) { @@ -222,13 +228,29 @@ kiro_client_sync (KiroClient *self)      if (rdma_get_send_comp (priv->conn, &wc) < 0) {          g_critical ("No send completion for RDMA_READ received: %s", strerror (errno)); -        rdma_disconnect (priv->conn); -        kiro_destroy_connection_context (&ctx); -        rdma_destroy_ep (priv->conn); -        return -1; +        goto fail;      } -    return 0; +    switch (wc.status) { +        case IBV_WC_SUCCESS: +            return 0; +        case IBV_WC_RETRY_EXC_ERR: +            g_critical ("Server no longer responding"); +            break; +        case IBV_WC_REM_ACCESS_ERR: +            g_critical ("Server has revoked access right to read data"); +            break; +        default: +            g_critical ("Could not get data from server. Status %u", wc.status); +    } + + +fail: +    rdma_disconnect (priv->conn); +    kiro_destroy_connection_context (&ctx); +    rdma_destroy_ep (priv->conn); +    priv->conn = NULL; +    return -1;  } diff --git a/test/test-client.c b/test/test-client.c index 45ce722..a7bbc16 100644 --- a/test/test-client.c +++ b/test/test-client.c @@ -80,7 +80,10 @@ main ( int argc, char *argv[] )          for (SDL_Event event; SDL_PollEvent (&event);)              if (event.type == SDL_QUIT) cont = 0; -        kiro_client_sync (client); +        if (kiro_client_sync (client) < 0) { +            g_warning ("Unable to get data from server. Stopping."); +            break; +        }          SDL_Delay (10);          render (data_sf);      } | 
