Hi Robert,

I'm working on osg 2.9.5 (rev 10384)
But i reproduced the warning with my test app using the head revision 12951.


2012/2/7 Robert Osfield <[email protected]>

> Hi Mikael,
>
> Which version of the OSG are you using?
>
> Robert.
>
> On 7 February 2012 09:37, mikael lemercier <[email protected]>
> wrote:
> > Hi all,
> >
> > I'm currently testing my osg application and I sometimes (1/10000) get
> the
> > following warning:
> > "Warning: deleting still referenced object XXX of type 'XXX'
> >          the final reference count was 1, memory corruption possible."
> > Followed by a crash.
> >
> > Looking at osg::Referenced::unref(), I wonder if this function is really
> > thread safe.
> > Indeed, nothing seems to prevent the _refCount variable to be modified
> > between the operator-- and the deletion of the object.
> > If a thread increments _refCount after the operator--, the delete is
> still
> > called and we get the warning.
> >
> >
> > I made a quick test to reproduce it:
> >
> > #include <OpenThreads/Thread>
> > #include <osg/Image>
> >
> > class MyThread :
> >     public OpenThreads::Thread {
> > public:
> >     MyThread(osg::Image* imagePtr) :
> >         _imagePtr(imagePtr) {
> >     }
> >
> >     virtual ~MyThread() {
> >     }
> >
> >     void run() {
> >         microSleep(50);
> >         _imageRefPtr = _imagePtr;
> >     }
> >
> >     osg::Image* _imagePtr;
> >     osg::ref_ptr<osg::Image> _imageRefPtr;
> > };
> >
> >
> >
> > int main(int argc, char** argv) {
> >
> >     osg::Image* imagePtr = new osg::Image();
> >     MyThread t(imagePtr);
> >
> >     osg::ref_ptr<osg::Image> imageRefPtr(imagePtr);
> >     t.startThread();
> >     imageRefPtr = 0;
> >     t.join();
> >
> >     return 0;
> > }
> >
> >
> > I also needed to add a microsleep in osg::Referenced::unref() so that i
> > could reproduce the warning more easlily.
> >
> >     if (needDelete)
> >     {
> >         OpenThreads::Thread::microSleep(1000);
> >         signalObserversAndDelete(true,true);
> >     }
> >     return newRef;
> >
> >
> > Thanks
> > Mikaƫl
> >
> >
> > _______________________________________________
> > osg-users mailing list
> > [email protected]
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to