<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3243" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=675142216-11062009><FONT face=Arial color=#0000ff 
size=2>Committed in 2229.</FONT></SPAN></DIV><BR>
<BLOCKQUOTE dir=ltr 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> ofw-bounces@lists.openfabrics.org 
  [mailto:ofw-bounces@lists.openfabrics.org] <B>On Behalf Of </B>Leonid 
  Keller<BR><B>Sent:</B> Monday, June 01, 2009 6:41 PM<BR><B>To:</B> 
  ofw@lists.openfabrics.org<BR><B>Subject:</B> [ofw][patches][IBAL] work around 
  for reference count leakage bugs<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV><FONT face=Arial size=2>IBAL still has bugs, which cause reference count 
  leakage, which stops the cascading destroying resources of IBAL.<BR>It 
  causes  in turn a freeze of IBBUS on HCA disable or system power 
  down.<BR>On checked builds IBAL forces destroying of the objects after some 
  timeout.<BR>On free version it waits endlessly.<BR>This patch makes the 
  behavior of free version to be <SPAN class=679483715-01062009>the same 
  </SPAN>in checked version while sending a message to System Event 
  Log.</FONT></DIV>
  <DIV><FONT face=Arial size=2></FONT> </DIV>
  <DIV><FONT face=Arial size=2></FONT> </DIV>
  <DIV><FONT face=Arial size=2></FONT> </DIV>
  <DIV><FONT face=Arial size=2>Index: 
  V:/svn/winib/trunk/core/al/al_common.c<BR>===================================================================<BR>--- 
  V:/svn/winib/trunk/core/al/al_common.c (revision 4403)<BR>+++ 
  V:/svn/winib/trunk/core/al/al_common.c (revision 4404)<BR>@@ -35,6 +35,7 
  @@<BR> #include "al_ci_ca.h"<BR> #include 
  "al_common.h"<BR> #include "al_debug.h"<BR>+#include 
  "al_ca.h"<BR> <BR> #if defined(EVENT_TRACING)<BR> #ifdef 
  offsetof<BR>@@ -46,6 +47,7 @@<BR> #include "al_mgr.h"<BR> #include 
  <complib/cl_math.h><BR> #include "ib_common.h"<BR>+#include 
  "bus_ev_log.h"<BR> <BR> <BR> <BR>@@ -498,7 +500,6 
  @@<BR> <BR>  if( deref_al_obj( p_obj ) 
  )<BR>  {<BR>- #ifdef 
  _DEBUG_<BR>   uint32_t  wait_us;<BR>   /*<BR>    
  * Wait for all other references to go away.  We wait as long as the<BR>@@ 
  -529,13 +530,11 
  @@<BR>      &p_obj->event, 
  AL_MAX_TIMEOUT_US, AL_WAIT_ALERTABLE );<BR>    } while( 
  cl_status == CL_NOT_DONE 
  );<BR>   }<BR>- #else<BR>-  do<BR>-  {<BR>-   cl_status 
  = cl_event_wait_on(<BR>-    &p_obj->event, 
  EVENT_NO_TIMEOUT, AL_WAIT_ALERTABLE );<BR>-  } while( cl_status == 
  CL_NOT_DONE );<BR>- #endif<BR>+  if ( p_obj->p_ci_ca 
  && p_obj->p_ci_ca )<BR>+   CL_PRINT_TO_EVENT_LOG( 
  p_obj->p_ci_ca->h_ca->p_fdo, 
  EVENT_IBBUS_ANY_ERROR,<BR>+    ("IBAL stuck: AL object %s, 
  ref_cnt: %d. Forcing object 
  destruction.\n",<BR>+    ib_get_obj_type( p_obj ), 
  p_obj->ref_cnt));<BR>+<BR>   CL_ASSERT( cl_status == 
  CL_SUCCESS );<BR>   if( cl_status != CL_SUCCESS 
  )<BR>   {<BR></FONT></DIV></BLOCKQUOTE></BODY></HTML>