Hi Ola,

I don't think your suggested change will help as you are taking a
reference to a potentially deleted object, the Terrain::_mutex that is
locked doesn't effected the children just the management of the
Terrain::_terrainTileMap and _updateTerrainTileSet.

My current thought is that we'll need to introduce a form of set that
manages a list of observer_ptr<> much in the same way that the
ObserverNodePath is managed, so we'll need an equivalent
ObserverNodeSet class.

Robert.

On 27 August 2012 12:46, Ola Nilsson <[email protected]> wrote:
> Hi Robert et al.,
>
> I finally got the time to investigate the code (osgTerrain/Terrain.cpp).
>
> As I see it, it is not necessary to introduce a new data structure to hold
> the list of update tiles. The issue was that a TerrainTile could be partly
> destructed but not unregisterTile:ed, when an Terrain::update call was made.
> Then, a TerrainTile could get its refcount bumped while being destructed and
> be deleted with a dangling ref_ptr to deleted memory.
>
> My solution is inspired by the code in ObserverSet::addRefLock and only
> modifies Terrain::traverse. I bump the raw Terrain-pointers in the update
> list to ref_ptr and check their status before doing any work on them.
> TerrainTiles with a refcount of 1 should be discarded (but not deleted).
>
> I have attached the complete file. Should this conversation be continued at
> osg-submissions also/instead?
>
> Cheers,
>
> Ola
>
>
>> Hi Ola et. al,
>>
>> I've looked at the problem Terrain containers and they present an
>> interesting issue - the std::set<TerrainTile*> that is used can't
>> easily be converted into an std::set< osg::observer_ptr<TerrainTile> >
>> as the observer_ptr<> can have it's value changed to NULL by another
>> thread when destructing the observed TerrainTile and std::set<>
>> require their values to be const.
>>
>> What will be required is a custom container of osg::oberserver_ptr<>
>> along the lines of osg::OberservedNodePath but written to manage it's
>> contents in a similar way to a std::set.
>>
>> Robert.
>> _______________________________________________
>> osg-users mailing list
>> [email protected]
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
> Using Opera's revolutionary email client: http://www.opera.com/mail/
>
> _______________________________________________
> 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