[Insight-developers] LightObject race condition fix

Gaëtan Lehmann gaetan.lehmann at jouy.inra.fr
Mon Aug 6 08:11:22 EDT 2007


Le 6 août 07 à 13:38, Bill Lorensen a écrit :

> Gaeten,
>
> Which changes did we decide on? We should be very careful here. We  
> don't want any efficiency problems.
>

yes, that's a sensible peace of code - that's why I made the changes  
as small as possible. More changes should be carrefully reviewed.
The changes are:

[glehmann at marvin Common]$ cvs diff -u
Index: itkLightObject.cxx
===================================================================
RCS file: /cvsroot/Insight/Insight/Code/Common/itkLightObject.cxx,v
retrieving revision 1.34
diff -u -r1.34 itkLightObject.cxx
--- itkLightObject.cxx  4 Apr 2007 20:04:10 -0000       1.34
+++ itkLightObject.cxx  6 Aug 2007 12:07:57 -0000
@@ -150,12 +150,12 @@
::UnRegister() const
{
    m_ReferenceCountLock.Lock();
-  m_ReferenceCount--;
+  int tmpReferenceCount = --m_ReferenceCount;
    m_ReferenceCountLock.Unlock();

    // ReferenceCount in now unlocked.  We may have a race condition
    // to delete the object.
-  if ( m_ReferenceCount <= 0)
+  if ( tmpReferenceCount <= 0)
      {
      delete this;
      }
Index: itkLightObject.h
===================================================================
RCS file: /cvsroot/Insight/Insight/Code/Common/itkLightObject.h,v
retrieving revision 1.33
diff -u -r1.33 itkLightObject.h
--- itkLightObject.h    6 Feb 2006 22:01:56 -0000       1.33
+++ itkLightObject.h    6 Aug 2007 12:07:57 -0000
@@ -114,7 +114,7 @@
    virtual void PrintTrailer(std::ostream& os, Indent indent) const;

    /** Number of uses of this object by other objects. */
-  mutable int m_ReferenceCount;
+  volatile mutable int m_ReferenceCount;
    /** Mutex lock to protect modification to the reference count */
    mutable SimpleFastMutexLock m_ReferenceCountLock;

Gaëtan


> Bill
>
> On 8/6/07, Gaëtan Lehmann <gaetan.lehmann at jouy.inra.fr> wrote:
> Le 12 juil. 07 à 00:31, Peter Cech a écrit :
>
> > On Wed, Jul 11, 2007 at 11:02:16 -0400, Karthik Krishnan wrote:
> >> On 7/11/07, Gaëtan Lehmann <gaetan.lehmann at jouy.inra.fr> wrote:
> >>>
> >>>
> >>> Le 11 juil. 07 à 15:33, Karthik Krishnan a écrit :
> >>>
> >>>> However I agree with Steve/Luis that access of the resource
> >>>> m_ReferenceCount be thread safe. One solution would be to use a
> >>>> scoped lock (unlocking is implemented in its destructor, so it
> >>>> automatically does that when it goes out of scope).
> >>>>
> >>>> The code would look like
> >>>>
> >>>> UnRegister()
> >>>> {
> >>>>   ScopedLock lock( m_ReferenceCountLock )
> >>>>   m_ReferenceCount--;
> >>>>   if ( m_ReferenceCount <= 0) { delete this;  }
> >>>> }
> >>>
> >>> Please correct if I'm wrong, but the mutex lock will be  
> destroyed by
> >>> the delete call before the destruction of the ScopedLock object,
> >>
> >>
> >> You're right.. How silly of me :) I'd suggest leaving it as is..
> >
> > It's past midnight here, so I'll refrain from trying to post any
> > solutions, but there is something relevant here:
> >
> > http://softwarecommunity.intel.com/isn/Community/en-US/forums/
> > thread/30225804.aspx
> >
> > Enjoy!
> >
>
> Hi,
>
> I realize I haven't put the changes in the cvs repository.
> Can I do that ?
>
> Would be great also to explore Peter's link. It seem quite complex
> though, and I didn't get enough time yet to look at it carefully...
>
> Gaëtan
>
>
> --
> Gaëtan Lehmann
> Biologie du Développement et de la Reproduction
> INRA de Jouy-en-Josas (France)
> tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
> http://voxel.jouy.inra.fr
>
>
>
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers
>

--
Gaëtan Lehmann
Biologie du Développement et de la Reproduction
INRA de Jouy-en-Josas (France)
tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
http://voxel.jouy.inra.fr





More information about the Insight-developers mailing list