<div dir="ltr">Hmmm. This is fishy. I wonder if there is a leak somewhere in the new code. Can you try something for me? Add a reader->GetOutput()->DebugOn() right after SetInputData() and re-run. Do you see the object reference count go to 0 in deactivate?<div>

<br></div><div>-berk</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Apr 28, 2014 at 11:53 AM, Maarten Beek <span dir="ltr"><<a href="mailto:beekmaarten@yahoo.com" target="_blank">beekmaarten@yahoo.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:12pt;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><div>

Hi all,</div><div><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">I bumped into something I don't really understand:<br>

</div><div><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">void MyClass::activate()</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

{</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span>    vtkSmartPointer<vtkTIFFReader> reader = vtkSmartPointer<vtkTIFFReader>::New();</span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span>    <...></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

<span><span><span>   
 reader->Update();</span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><br>

</span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span>    m_Processor->SetInputData(reader->GetOutput());</span><br>

}</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

void MyClass::deactivate()</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">{</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

<span>    if( 0 != m_Processor )</span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span>    {</span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span>    <span>    m_Processor->RemoveAllInputs();</span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span>    <span>    m_Processor->Delete();</span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span><span>    <span>    m_Processor = 0;<br>

</span></span></span></span></span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span>    }</span></span></span><br>

}</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

In the deactivate() function I do need the RemoveAllInputs() call to avoid a 50MB memory leak (100 slice 512x512 tiff). I don't need RemoveAllInputs() when I use SetInputConnection(reader->GetOutputPort()) in the activate() function.</div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

Why is the difference between SetInputData() and SetInputConnection() with regards to memory management?</div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

<br></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span>m_Processor is derived from vtkImageAlgorithm and has an internal pipeline inside the RequestData(), processing the image data with vtkImageConvolve, vtkImageSobel2D, vtkImageThreshold and a few more.</span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><br><span><span><span><span></span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

<span><span><span><span>int ProcessorClass::RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector* outputVector)</span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

<span><span><span><span>{</span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span>    vtkInformation* outInfo = outputVector->GetInformationObject(0);</span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span>    vtkImageData* output = vtkImageData::SafeDownCast(outInfo->Get(vtkdataObject::DATA_OBJECT()));</span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span><br></span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span>    if( this->GetMTime() > this->BuildTime )</span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span>   
 </span>{</span></span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span><span>    <span>    this->buildPipeline();</span></span></span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span><span>    </span></span>}</span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><br><span><span><span><span><span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span>    if( 0 != this->GetNumberOfInputConnections(0) )</span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span><span>    {</span></span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span><span><span>    <span>    this->MergeFilter->Update();</span></span></span></span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span><span><span><span><span>    <span>    output->ShallowCopy(this->MergeFilter->GetOutput());</span></span></span></span></span></span></span></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><span><span><span><span><span><span><span><span>   
 }</span></span></span></span></span></span></span></span></span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

<br><span><span><span><span><span><span><span><span><span><span><span><span></span></span></span></span></span></span></span></span></span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

<span><span><span><span><span><span><span><span><span><span><span><span><span>    return 1;</span></span></span></span></span></span></span></span></span></span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">

<span><span><span><span><span><span><span><span><span><span><span><span><span>}<span class="HOEnZb"><font color="#888888"><br></font></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>

<span class="HOEnZb"><font color="#888888"><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><br>

</span></span></span></span></div><div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif"><span><span><span><span><br></span></span></span></span></div>

<div style="font-style:normal;font-size:16px;background-color:transparent;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif">Maarten<br></div></font></span></div></div><br>_______________________________________________<br>


Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
<br></blockquote></div><br></div>