]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
librdmacm/rsocket: Fix resetting O_NONBLOCK after calling shutdown
authorSean Hefty <sean.hefty@intel.com>
Wed, 20 Feb 2013 04:03:58 +0000 (20:03 -0800)
committerSean Hefty <sean.hefty@intel.com>
Wed, 20 Feb 2013 04:03:58 +0000 (20:03 -0800)
Shutdown switches an rsocket from nonblocking to blocking to
ensure that all data has been sent.  After completing all
transfers, it should switch back to nonblocking; this handles
partial shutdown situations, where only half the connection
is shut down.  However, the code uses the value of '1' to
set the nonblocking flag, rather than O_NONBLOCK.  Fix this.

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

index 9b6c6673aa945e0c1e057f7239df16b14a3d48e3..03f5dc482f7a68bc4d656df01f81c30547bf45b5 100644 (file)
@@ -3023,7 +3023,7 @@ int rshutdown(int socket, int how)
                rs_process_cq(rs, 0, rs_conn_all_sends_done);
 
        if ((rs->fd_flags & O_NONBLOCK) && (rs->state & rs_connected))
-               rs_set_nonblocking(rs, 1);
+               rs_set_nonblocking(rs, rs->fd_flags);
 
        return 0;
 }
@@ -3040,7 +3040,7 @@ static void ds_shutdown(struct rsocket *rs)
        ds_process_cqs(rs, 0, ds_all_sends_done);
 
        if (rs->fd_flags & O_NONBLOCK)
-               rs_set_nonblocking(rs, 1);
+               rs_set_nonblocking(rs, rs->fd_flags);
 }
 
 int rclose(int socket)