<!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 which are refered by each
other:</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2>class CVTKHost : public vtkObject{</FONT></DIV>
<DIV><FONT size=2> ...</FONT></DIV>
<DIV><FONT size=2> vtkSetObjectMacro(Client,
CVTKClient);</FONT></DIV>
<DIV><FONT size=2> ...</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2> CVTKClient *Client;</FONT></DIV>
<DIV><FONT size=2>}</FONT> </DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV>
<DIV><FONT size=2>class CVTKClient : public vtkObject{</FONT></DIV>
<DIV><FONT size=2> ...</FONT></DIV>
<DIV><FONT size=2> vtkSetObjectMacro(Host,
CVTKHost);</FONT></DIV>
<DIV><FONT size=2> ...</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2> CVTKHost *Host;</FONT></DIV>
<DIV><FONT size=2>}</FONT> </DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2>I use them as follows:</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2>CVTKHost *pHost = CVTKHost::New();<BR>CVTKClient *pClient =
CVTKClient::New();</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT
size=2>pHost->SetClient(pClient);<BR>pClient->SetHost(pHost);</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2>pHost->Delete();<BR>pClient->Delete();</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2>Because they are referred by each other, a dead
lock occurs in the above code, which causes</FONT></DIV>
<DIV><FONT size=2>objects pointered by pHost&pClient will not be
released. </FONT></DIV>
<DIV><FONT size=2></FONT> </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> </DIV>
<DIV>
<DIV><FONT
size=2>pHost->SetClient(pClient);<BR>pClient->SetHost(pHost);</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT
size=2>pHost->SetClient(NULL);<BR>pClient->SetHost(NULL);</FONT></DIV>
<DIV><FONT
size=2>pHost->Delete();<BR>pClient->Delete();</FONT> </DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2>but it's tedious.</FONT></DIV>
<DIV><FONT size=2></FONT> </DIV>
<DIV><FONT size=2>Anybody knows more better way to resolve this condition in
vtk? 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 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> </DIV>
<DIV><FONT size=2>Appreciate any advice.</FONT></DIV></DIV></DIV></BODY></HTML>