<!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>