From: ftillier Date: Tue, 27 Sep 2005 00:29:35 +0000 (+0000) Subject: [WSD] Remove sockets from tracking map when RTU or duplication fails. X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=a53b131fc9c5c57fa4f97b38fd173ca5583b6b79;p=~shefty%2Frdma-win.git [WSD] Remove sockets from tracking map when RTU or duplication fails. Signed-off-by: Fab Tillier (ftillier@silverstorm.com) git-svn-id: svn://openib.tc.cornell.edu/gen1@90 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/wsd/user/ib_cm.c b/trunk/ulp/wsd/user/ib_cm.c index 44d639b7..b745983b 100644 --- a/trunk/ulp/wsd/user/ib_cm.c +++ b/trunk/ulp/wsd/user/ib_cm.c @@ -247,8 +247,12 @@ cm_rep_callback( if( status != IB_SUCCESS ) { /* Note: a REJ has been automatically sent. */ - IBSP_ERROR( ("ib_cm_rtu failed (0x%d)\n", status) ); + IBSP_ERROR( ("ib_cm_rtu returned %s\n", ib_get_err_str( status )) ); IBSP_CHANGE_SOCKET_STATE( socket_info, IBSP_BIND ); + + /* We changed the state - remove from connection map. */ + ibsp_conn_remove( socket_info ); + ibsp_post_select_event( socket_info, FD_CONNECT, WSAETIMEDOUT ); } else @@ -262,14 +266,20 @@ cm_rep_callback( status = ib_cm_rtu( p_cm_rep_rec->h_cm_rep, &cm_rtu ); if( status != IB_SUCCESS ) { + IBSP_CHANGE_SOCKET_STATE( socket_info, IBSP_BIND ); + + /* We changed the state - remove from connection map. */ + ibsp_conn_remove( socket_info ); + /* Note: a REJ has been automatically sent. */ - IBSP_ERROR( ("ib_cm_rtu failed (0x%d)\n", status) ); + IBSP_ERROR( ("ib_cm_rtu returned %s\n", ib_get_err_str( status )) ); } else { IBSP_CHANGE_SOCKET_STATE( socket_info, IBSP_CONNECTED ); } SetEvent( socket_info->h_event ); + break; default: /* The socket might be closing */ @@ -414,7 +424,7 @@ cm_rej_callback( IBSP_ENTER( IBSP_DBG_CM ); - IBSP_TRACE( IBSP_DBG_CONN, ("socket %p connect reject, reason=%d\n", + IBSP_TRACE( IBSP_DBG_CM, ("socket %p connect reject, reason=%d\n", socket_info, cl_ntoh16(p_cm_rej_rec->rej_status)) ); cl_spinlock_acquire( &socket_info->mutex ); @@ -519,7 +529,11 @@ cm_dreq_callback( ret = ib_listen( socket_info ); if( !ret ) + { + /* We changed the state - remove from connection map. */ + ibsp_conn_remove( socket_info ); break; + } IBSP_ERROR_EXIT( ("ib_listen failed with %d\n", ret) ); /* Fall through. */ diff --git a/trunk/ulp/wsd/user/ibspdll.c b/trunk/ulp/wsd/user/ibspdll.c index eb47fb45..62096471 100644 --- a/trunk/ulp/wsd/user/ibspdll.c +++ b/trunk/ulp/wsd/user/ibspdll.c @@ -1493,7 +1493,7 @@ IBSPListen( if( ret ) { IBSP_CHANGE_SOCKET_STATE( socket_info, IBSP_BIND ); - CL_EXIT_ERROR( IBSP_DBG_CONN, gdbg_lvl, ("ib_listen failed with %d\n", ret) ); + IBSP_ERROR_EXIT( ("ib_listen failed with %d\n", ret) ); } break;