From: ftillier Date: Tue, 27 Sep 2005 00:25:10 +0000 (+0000) Subject: [WSD] Add locking around state checks. X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=312449c6c4974c03ed6b4de280fc56ccdf9b8ce0;p=~shefty%2Frdma-win.git [WSD] Add locking around state checks. Signed-off-by: Fab Tillier (ftillier@silverstorm.com) git-svn-id: svn://openib.tc.cornell.edu/gen1@88 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/wsd/user/extensions.c b/trunk/ulp/wsd/user/extensions.c index ff8456b4..83f95c68 100644 --- a/trunk/ulp/wsd/user/extensions.c +++ b/trunk/ulp/wsd/user/extensions.c @@ -336,15 +336,22 @@ do_rdma_op( CL_ASSERT( wr_type == WR_RDMA_WRITE || wr_type == WR_RDMA_READ ); - /* Check the state of the socket */ - if( socket_info->socket_state != IBSP_CONNECTED ) + cl_spinlock_acquire( &socket_info->mutex ); + switch( socket_info->socket_state ) { + case IBSP_CONNECTED: + case IBSP_DISCONNECTED: + break; + + default: + cl_spinlock_release( &socket_info->mutex ); IBSP_ERROR_EXIT( ("Socket is not in connected socket_state state=%s\n", IBSP_SOCKET_STATE_STR( socket_info->socket_state )) ); *lpErrno = WSAENOTCONN; return SOCKET_ERROR; } + cl_spinlock_release( &socket_info->mutex ); if( socket_info->qp_error ) { diff --git a/trunk/ulp/wsd/user/ibspdll.c b/trunk/ulp/wsd/user/ibspdll.c index cd286462..eb47fb45 100644 --- a/trunk/ulp/wsd/user/ibspdll.c +++ b/trunk/ulp/wsd/user/ibspdll.c @@ -1571,15 +1571,22 @@ IBSPRecv( return SOCKET_ERROR; } - /* Check the state of the socket */ - if( socket_info->socket_state != IBSP_CONNECTED ) + cl_spinlock_acquire( &socket_info->mutex ); + switch( socket_info->socket_state ) { + case IBSP_CONNECTED: + case IBSP_DISCONNECTED: + break; + + default: + cl_spinlock_release( &socket_info->mutex ); IBSP_ERROR_EXIT( ("Socket is not in connected socket_state state=%s\n", IBSP_SOCKET_STATE_STR( socket_info->socket_state )) ); *lpErrno = WSAENOTCONN; return SOCKET_ERROR; } + cl_spinlock_release( &socket_info->mutex ); if( socket_info->qp_error != 0 ) { @@ -1782,7 +1789,6 @@ IBSPSend( CL_ASSERT( lpOverlapped != NULL ); cl_spinlock_acquire( &socket_info->mutex ); - /* Check the state of the socket */ switch( socket_info->socket_state ) { case IBSP_CONNECTED: @@ -1790,7 +1796,10 @@ IBSPSend( break; default: - IBSP_ERROR_EXIT( ("Socket is not in connected socket_state \n") ); + cl_spinlock_release( &socket_info->mutex ); + IBSP_ERROR_EXIT( + ("Socket is not in connected socket_state state=%s\n", + IBSP_SOCKET_STATE_STR( socket_info->socket_state )) ); *lpErrno = WSAENOTCONN; return SOCKET_ERROR; }