<!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.2873" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>Hi Fab, 
</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>While preparing 
IBADM for release we saw one of it tools failing on exit. In debug version we it 
produces </SPAN></FONT><FONT face=Arial size=2><SPAN 
class=201515914-06082006>several assertions:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=201515914-06082006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    
Assertion Failed:ref_cnt != 1 || p_obj->type == 
AL_OBJ_TYPE_H_CQ</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    
Assertion Failed:p_list_item->p_list != p_list</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=201515914-06082006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>As far as i can see, 
it happens, because, while performing of ib_close_al(), IBAL destroys POOL_KEY 
before QP.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=201515914-06082006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>In more 
details:</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    - 
ib_close_al calls destroy() of AL object;</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    
- destroy() of AL takes the first child - CA - and calls its 
destroy();</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    - 
destroy() of CA takes the first child - PD - and calls its 
destroy();</SPAN></FONT></DIV><FONT><SPAN class=201515914-06082006>
<DIV><SPAN class=201515914-06082006>
<DIV><SPAN class=201515914-06082006><FONT face=Arial size=2>    - 
destroy() of PD takes the first child - AV - and calls its 
destroy();</FONT>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    - 
destroy() of PD takes the second child - POOL_KEY - and 
calls its destroy();</SPAN></FONT></DIV></SPAN></DIV></SPAN><FONT 
face=Arial><FONT size=2><SPAN class=201515914-06082006>    - 
</SPAN>destroy<SPAN class=201515914-06082006>()</SPAN> <SPAN 
class=201515914-06082006>of POOL_KEY </SPAN>decreases <SPAN 
class=201515914-06082006>its </SPAN>ref_cnt to 0 and queues an object 
</FONT></FONT></DIV>
<DIV><FONT face=Arial><FONT size=2><SPAN 
class=201515914-06082006>    </SPAN>for *asynchronous* 
destruction of the POOL_KEY<SPAN class=201515914-06082006>. 
</SPAN></FONT></FONT></SPAN></FONT><FONT face=Arial size=2><SPAN 
class=201515914-06082006>Then it returns to destroy() of 
PD;</SPAN></FONT></DIV>
<DIV><FONT><SPAN class=201515914-06082006>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    - 
destroy() of PD takes the third child - QP - and calls its 
destroy();</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    - 
destroy() of QP calls destroying_qp(), which takes the reference on 
POOL_KEY before calling dereg_mad_poo();</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    
The latter action causes the first assert:</SPAN></FONT></DIV></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=201515914-06082006><STRONG>            
Assertion Failed:ref_cnt != 1 || p_obj->type == 
AL_OBJ_TYPE_H_CQ</STRONG></SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=201515914-06082006>    - 
then dereg_mad_poo() starts second destroy of POOL_KEY, which causes the 
second assert</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=201515914-06082006><STRONG>            
Assertion Failed:p_list_item->p_list != p_list</STRONG></SPAN></FONT></DIV>
<DIV><SPAN class=201515914-06082006><FONT face=Arial size=2>    
on queuing the same object for *asynchronous* destruction of the 
POOL_KEY.</FONT></SPAN></DIV>
<DIV><BR><SPAN class=201515914-06082006><FONT face=Arial size=2>Do you have any 
idea how to fix that ?</FONT></SPAN></DIV>
<DIV><SPAN class=201515914-06082006><FONT face=Arial 
size=2>TIA,</FONT></SPAN></DIV>
<DIV><SPAN class=201515914-06082006><FONT face=Arial 
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=201515914-06082006><FONT face=Arial 
size=2>Leonid</FONT></SPAN></DIV></SPAN></FONT></BODY></HTML>