Index: ipoib_port.cpp
===================================================================
--- ipoib_port.cpp	(revision 3095)
+++ ipoib_port.cpp	(working copy)
@@ -7205,7 +7205,10 @@
 
 	/* Wait for all readers to complete. */
 	while( p_port->endpt_rdr )
-		;
+	{
+		cl_obj_unlock( &p_port->obj );
+		cl_obj_lock( &p_port->obj );
+	}
 	/*
 	 * We don't need to initiate destruction - this is called only
 	 * from the __port_destroying function, and destruction cascades
@@ -7240,7 +7243,10 @@
 	cl_obj_lock( &p_port->obj );
 	/* Wait for all readers to complete. */
 	while( p_port->endpt_rdr )
-		;
+	{
+		cl_obj_unlock( &p_port->obj );
+		cl_obj_lock( &p_port->obj );
+	}
 
 #if 0
 	__endpt_mgr_remove_all(p_port);
@@ -7410,7 +7416,10 @@
 	cl_obj_lock( &p_port->obj );
 	/* Wait for all readers to complete. */    
 	while( p_port->endpt_rdr > 1 )
-		;
+	{
+		cl_obj_unlock( &p_port->obj );
+		cl_obj_lock( &p_port->obj );
+	}
 
 	/* Remove the endpoint from the maps so further requests don't find it. */
 	cl_qmap_remove_item( &p_port->endpt_mgr.mac_endpts, &p_endpt->mac_item );
@@ -7869,7 +7878,10 @@
 
 	/* Wait for all readers to finish */
 	while( p_port->endpt_rdr )
-		;
+	{
+		cl_obj_unlock( &p_port->obj );
+		cl_obj_lock( &p_port->obj );
+	}
 	p_item = cl_qmap_remove( &p_port->endpt_mgr.mac_endpts, key );
 	/*
 	 * Dereference the endpoint.  If the ref count goes to zero, it
