[Insight-developers] Broken backwards compatibility -- results of 2 days debugging
Daniel Blezek
Blezek.Daniel at mayo.edu
Tue Aug 25 10:42:22 EDT 2009
Hi all,
I had integrated Luca Antiga¹s vesselness code into our application a
while ago. Fairly recently, it has been breaking on one of our platforms,
the only one building with the CVS head version of Insight. I finally
tracked the crash down to this sequence.
Luca¹s code creates output images of different types and caches them in the
outputs:
typename HessianImageType::Pointer hessianImage = HessianImageType::New();
this->ProcessObject::SetNthOutput(2,hessianImage.GetPointer());
Later, he grabs the output and allocates the buffers:
this->GetOutput(2)->SetBufferedRegion(this->GetOutput(2)->GetRequestedRegion
());
this->GetOutput(2)->Allocate();
This code crashes due to this change:
revision 1.64
date: 2009-03-10 09:38:35 -0500; author: blowekamp; state: Exp; lines:
+24 -10; commitid: 0s3FC2A2iqP1NuFt;
BUG: 8681 ImageSource lacks type safety for multiple outputs of different
types. Changed static_cast to dynamic_cast in GetOutput(unsigned int), so
that we don't return an invalid pointer. GraftNthOutput now uses type safe
ProcessObject::GetOutput. AllocateOutputs previously would segfault under
these conditions. Now it safely casts to ImageBase and calls Allocate
methods.
which made this code use dynamic_cast, rather than static_cast:
return dynamic_cast<TOutputImage*>
(this->ProcessObject::GetOutput(idx));
So now, my GetOutput(2) returns null (cause it¹s not a TOutputImage) and
everything crashes.
This was highly frustrating to me. Yes I know this is a bug, and I know it
should be fixed, but code which depended on this behavior (Luca¹s first
implementation) is now broken. Does this constitute a break of backwards
compatibility?
I propose at least a warning if the static_cast and dynamic_cast return
different pointers. This would have saved me two days of deep debugging and
wondering why the same code ran fine on an older release version of ITK.
Best regards,
-dan
--
Daniel Blezek, PhD
Medical Imaging Informatics Innovation Center
P 127 or (77) 8 8886
T 507 538 8886
E blezek.daniel at mayo.edu
Mayo Clinic
200 First St. S.W.
Harwick SL-44
Rochester, MN 55905
mayoclinic.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20090825/1cd15b12/attachment.htm>
More information about the Insight-developers
mailing list