Hi Matt,

You are right, the troublesome member variable can be removed
entirely, making your solution the correct fix. Thank you.

Best regards,
Yves


On Tue, Aug 26, 2014 at 5:31 AM, Matt McCormick
<[email protected]> wrote:
> Hi Yves,
>
> Yes, your comments are very welcome.  Thank you for discussing this
> issue with the list!
>
> Regarding the issue described and the patch, I think it is a good
> start.  As you not, the smart pointers are not very effective from an
> efficiency perspect, and it would be fine to replace them by raw
> pointer since there is no issue with ownership or life time
> management.  However, the thread-safety is still an issue. Digging
> into the code, it looks like the m_Selectors member in
> PCAShapeSignedDistanceFunction can be removed altogether.  Please
> review this patch:
>
>   http://review.source.kitware.com/#/c/16824/
>
> Thanks,
> Matt
>
> On Mon, Aug 18, 2014 at 10:30 AM, Yves Frederix
> <[email protected]> wrote:
>> Hi all,
>>
>> I am writing you with a crash I encountered while experimenting with
>> the GeodesicActiveContour  image filter with shape guidance. Although
>> I did not find the root cause of the problem, I did implement a small
>> change which might be a useful contribution.
>>
>> Currently, the GeodesicActiveContourShapePriorLevelSetImageFilter is
>> based on a SparseField solver. For my application, this was not very
>> suitable and I implemented a version of this image filter based on a
>> dense solver. After doing this, however, I consistently experienced a
>> crash in the algorithm when more than one thread was used. After some
>> debugging, I tracked down the problem to
>> itkPCAShapeSignedDistanceFunction, which contains a smart pointer
>> member variable which caused the crash in the multithreaded run. In
>> particular, it seemed to me that the reference counting somehow got
>> confused, and things went wrong.
>> I did not feel comfortable enough to dig deeper into the root cause of
>> the problem, but I did do a simple fix to the
>> itkPCAShapeSignedDistanceFunction code that avoids the problem, which
>> I would like to share (see attach). Basically, I replaced the
>> problematic reference counting member variable by a raw pointer, so
>> that during iteration no reference counting takes place. In this
>> particular case, I think that this change does not impose any risks as
>> there is no issue with ownership or life time management.
>>
>> I am unsure if this mailing list is the best or correct medium to
>> report this, so if not, please point me to the right direction. If
>> somebody would be interested in looking at the root cause of this
>> issue, I should be able to provide some code to reproduce the crash.
>> Just let me know.
>>
>> Best regards,
>> Yves
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://kitware.com/products/protraining.php
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://public.kitware.com/mailman/listinfo/insight-developers
>>
>> _______________________________________________
>> Community mailing list
>> [email protected]
>> http://public.kitware.com/mailman/listinfo/community
>>
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-developers

Reply via email to