]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
rsockets: Fix shutdown
authorSean Hefty <sean.hefty@intel.com>
Thu, 26 Jul 2012 22:35:32 +0000 (15:35 -0700)
committerSean Hefty <sean.hefty@intel.com>
Thu, 26 Jul 2012 22:35:32 +0000 (15:35 -0700)
mpi finalize hangs - fix it

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
src/preload.c
src/rsocket.c

index 52eaf1a52b31f083e542d1e6b88fd56e313e39f3..026ff1c6f86cb939c0ac2c87add297408e60d8c9 100644 (file)
@@ -801,6 +801,7 @@ int select(int nfds, fd_set *readfds, fd_set *writefds,
 int shutdown(int socket, int how)
 {
        int fd;
+       fflush(stdout);
        return (fd_get(socket, &fd) == fd_rsocket) ?
                rshutdown(fd, how) : real.shutdown(fd, how);
 }
index ed125b3b3a382dafc7ed64b3a4fd65a3ff0c06c9..d374af71e876eed0bbe9b2d63408fd925e69264d 100644 (file)
@@ -1708,6 +1708,7 @@ int rshutdown(int socket, int how)
        int ctrl, ret = 0;
 
        rs = idm_at(&idm, socket);
+       printf("rshutdown %d - %p {\n", socket, rs);
        if (how == SHUT_RD) {
                rs_shutdown_state(rs, rs_connect_rd);
                return 0;
@@ -1726,7 +1727,9 @@ int rshutdown(int socket, int how)
                                RS_CTRL_SHUTDOWN : RS_CTRL_DISCONNECT;
                }
                if (!rs_can_send_ctrl(rs)) {
+                       printf("  rshutdown - need ctrl msg %d - %p\n", socket, rs);
                        ret = rs_process_cq(rs, 0, rs_can_send_ctrl);
+                       printf("  rshutdown - have ctrl msg %d - %p\n", socket, rs);
                        if (ret)
                                return ret;
                }
@@ -1735,14 +1738,21 @@ int rshutdown(int socket, int how)
                ret = rs_post_write(rs, 0, NULL, 0,
                                    rs_msg_set(RS_OP_CTRL, ctrl),
                                    0, 0, 0);
+               if (ret)
+                       printf("rs_post_write failed %d %s\n", ret, strerror(errno));
        }
 
        if (!rs_all_sends_done(rs) && !(rs->state & rs_error))
+       {
+               printf("  rshutdown - need sends %d - %p\n", socket, rs);
                rs_process_cq(rs, 0, rs_all_sends_done);
+               printf("  rshutdown - have sends %d - %p\n", socket, rs);
+       }
 
        if ((rs->fd_flags & O_NONBLOCK) && (rs->state & rs_connected))
                rs_set_nonblocking(rs, 1);
 
+       printf("} rshutdown %d - %p\n", socket, rs);
        return 0;
 }
 
@@ -1751,9 +1761,11 @@ int rclose(int socket)
        struct rsocket *rs;
 
        rs = idm_at(&idm, socket);
+       printf("rclose %d - %p {\n", socket, rs);
        if (rs->state & rs_connected)
                rshutdown(socket, SHUT_RDWR);
 
+       printf("} rclose %d - %p\n", socket, rs);
        rs_free(rs);
        return 0;
 }