<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.2769" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2>There are two classes&nbsp;which are refered by each 
other:</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>class CVTKHost : public vtkObject{</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; vtkSetObjectMacro(Client, 
CVTKClient);</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; CVTKClient *Client;</FONT></DIV>
<DIV><FONT size=2>}</FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV>
<DIV><FONT size=2>class CVTKClient : public vtkObject{</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; vtkSetObjectMacro(Host, 
CVTKHost);</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; CVTKHost *Host;</FONT></DIV>
<DIV><FONT size=2>}</FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>I use them as follows:</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>CVTKHost *pHost = CVTKHost::New();<BR>CVTKClient *pClient = 
CVTKClient::New();</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT 
size=2>pHost-&gt;SetClient(pClient);<BR>pClient-&gt;SetHost(pHost);</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>pHost-&gt;Delete();<BR>pClient-&gt;Delete();</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>Because they are referred by each other, a dead 
lock&nbsp;occurs in the above code, which causes</FONT></DIV>
<DIV><FONT size=2>objects&nbsp;pointered by&nbsp;pHost&amp;pClient will not be 
released.&nbsp; </FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>One way to resolve it is to re-arrange above codes 
as:</FONT></DIV>
<DIV><FONT size=2>...</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV>
<DIV><FONT 
size=2>pHost-&gt;SetClient(pClient);<BR>pClient-&gt;SetHost(pHost);</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT 
size=2>pHost-&gt;SetClient(NULL);<BR>pClient-&gt;SetHost(NULL);</FONT></DIV>
<DIV><FONT 
size=2>pHost-&gt;Delete();<BR>pClient-&gt;Delete();</FONT>&nbsp;&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>but it's tedious.</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>Anybody knows more better way to resolve this condition in 
vtk?&nbsp; I know the classes of vtkAlgorithm</FONT></DIV>
<DIV><FONT size=2>and vtkExecutive are also cross-referred, and Register(), 
UnRegister() methods in them are overridden with </FONT></DIV>
<DIV><FONT size=2>garbage collection mechanism in vtk. But i 
donna&nbsp;understand this mechanism so clearly that i donna know </FONT></DIV>
<DIV><FONT size=2>whether it's the way to resolve this problem in vtk. 
</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>Appreciate any advice.</FONT></DIV></DIV></DIV></BODY></HTML>