<!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><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></BODY></HTML>