A couple points of clarification. - All threads are using the same aspect - Sync means a critical section where the data from the background thread is connected to the scene graph that is being used in the primordial thread
So data is created in one thread, connected in another thread, and then used. -Allen PS. Aron is under describing how nasty this bug is and how bad it is killing us. On Mon, Mar 23, 2009 at 3:31 PM, Aron Bierbaum <[email protected]> wrote: > I have been beating my head against the wall trying to figure out a > bug in our application and I don't know if I understand enough about > how OpenSG works in order to find the bug. The basic idea is that our > application creates some geometry in a background thread, and then > syncs that geometry into the OpenSG scene graph in the primordial > thread. Later on the geometry is removed from the graph and deleted. > While trying to delete the object that contains the geometry I get the > following stack trace. It appears that while trying to clear the > geometry properties there is an invalid pointer access. Does anyone > have any ideas and/or guidance as to what could be causing this? > > > 00000000() >> >> OSGDrawable.dll!OSG::ChildAccessHandler<OSG::UnrecordedRefCountPolicy>::unlinkParent(OSG::FieldContainer >> * const pParent=0x18da6900, OSG::FieldContainer * const pChild=0x0b077370, >> const unsigned short parentFieldId=3) Line 88 C++ > > OSGDrawable.dll!OSG::ChildAccessHandler<OSG::UnrecordedRefCountPolicy>::onReplace(OSG::PointerSFieldBase > * const pSField=0x18da69a0, OSG::FieldContainer * const > pOldObj=0x0b077370, OSG::FieldContainer * const pNewObj=0x00000000) > Line 167 + 0x34 bytes C++ > > OSGDrawable.dll!OSG::PointerSFieldCommon<OSG::ChildAccessHandler<OSG::UnrecordedRefCountPolicy>,1>::ptrStoreSet(OSG::FieldContainer > * const pNewObj=0x00000000) Line 107 + 0x13 bytes C++ > OSGDrawable.dll!OSG::ChildPointerSField<OSG::GeoIntegralProperty > *,OSG::UnrecordedRefCountPolicy,1>::setValue(OSG::GeoIntegralProperty > * const value=0x00000000) Line 110 C++ > OSGDrawable.dll!OSG::GeometryBase::setTypes(OSG::GeoIntegralProperty > * const value=0x00000000) Line 91 C++ > OSGDrawable.dll!OSG::GeometryBase::resolveLinks() Line 1226 C++ > OSGBase.dll!OSG::FieldContainer::subReferenceUnrecorded() Line 237 > C++ > OSGBase.dll!OSG::UnrecordedRefCountPolicy::subRef() Line 145 C++ > > OSGBase.dll!OSG::ChildAccessHandler<OSG::UnrecordedRefCountPolicy>::onReplace() > Line 169 + 0x9 bytes C++ > > OSGBase.dll!OSG::PointerSFieldCommon<OSG::ChildAccessHandler<OSG::UnrecordedRefCountPolicy>,1>::ptrStoreSet() > Line 107 + 0x13 bytes C++ > OSGBase.dll!OSG::ChildPointerSField<OSG::NodeCore > *,OSG::UnrecordedRefCountPolicy,1>::setValue() Line 110 C++ > OSGBase.dll!OSG::Node::resolveLinks() Line 983 C++ > OSGBase.dll!OSG::FieldContainer::subReferenceUnrecorded() Line 237 > C++ > OSGBase.dll!OSG::UnrecordedRefCountPolicy::subRef() Line 145 C++ > > OSGBase.dll!OSG::ChildAccessHandler<OSG::UnrecordedRefCountPolicy>::onSub() > Line 151 + 0x9 bytes C++ > > OSGBase.dll!OSG::PointerMFieldCommon<OSG::ChildAccessHandler<OSG::UnrecordedRefCountPolicy>,1>::ptrStoreClear() > Line 319 + 0x14 bytes C++ > OSGBase.dll!OSG::ChildPointerMField<OSG::Node > *,OSG::UnrecordedRefCountPolicy,1>::clear() Line 1066 C++ > OSGBase.dll!OSG::Node::resolveLinks() Line 984 C++ > OSGBase.dll!OSG::FieldContainer::subReferenceRecorded() Line 153 > C++ > > p5_dve_earth.dll!OSG::RecordedRefCountPolicy::subRef(OSG::FieldContainer > * const objectP=0x2318fe50) Line 68 C++ > p5_dve_earth.dll!OSG::RecordedRefCountPolicy::setRefd<OSG::Node > *,OSG::Node *>(OSG::Node * & pTarget=0x2318fe50, OSG::Node * > pSource=0x00000000) Line 75 + 0xb bytes C++ > > p5_dve_earth.dll!OSG::RefCountPtr<OSG::Node,OSG::MTRecordedRefCountPolicy>::operator=(OSG::Node > * const objectPtr=0x00000000) Line 133 + 0xd bytes C++ > > p5_dve_earth.dll!OSG::CoredNodeMTRefPtr<OSG::DoubleTransform>::setNode(OSG::Node > * const pNode=0x00000000) Line 489 C++ > > p5_dve_earth.dll!OSG::CoredNodeMTRefPtr<OSG::DoubleTransform>::~CoredNodeMTRefPtr<OSG::DoubleTransform>() > Line 352 C++ > p5_dve_earth.dll!dve::LandTile::~LandTile() Line 26 + 0x90 bytes > C++ > p5_dve_earth.dll!dve::LandTile::`scalar deleting destructor'() + > 0xf bytes C++ > > p5_dve_earth.dll!dve::SharedObjectDeleter<dve::LandTile>::operator()(dve::LandTile > * p=0x189b07e0) Line 88 + 0x20 bytes C++ > p5_dve_earth.dll!boost::detail::sp_counted_impl_pd<dve::LandTile > *,dve::SharedObjectDeleter<dve::LandTile> >::dispose() Line 145 C++ > p5_dve_earth.dll!boost::detail::sp_counted_base::release() Line 103 > C++ > p5_dve_earth.dll!boost::detail::shared_count::~shared_count() Line > 220 C++ > > p5_dve_earth.dll!boost::shared_ptr<dve::LandTile>::~shared_ptr<dve::LandTile>() > + 0x3f bytes C++ > p5_dve_earth.dll!dve::TileLayer::updateSectors(...) > > Thanks, > Aron > > ------------------------------------------------------------------------------ > Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are > powering Web 2.0 with engaging, cross-platform capabilities. Quickly and > easily build your RIAs with Flex Builder, the Eclipse(TM)based development > software that enables intelligent coding and step-through debugging. > Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com > _______________________________________________ > Opensg-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/opensg-users > ------------------------------------------------------------------------------ Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are powering Web 2.0 with engaging, cross-platform capabilities. Quickly and easily build your RIAs with Flex Builder, the Eclipse(TM)based development software that enables intelligent coding and step-through debugging. Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com _______________________________________________ Opensg-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensg-users
