Re: [osg-users] seg fault with text-setText(mystring) called in NodeCallback

2013-01-12 Thread Philip Lamb
If you're developing on Windows under visual studio one thing you should check 
is that all libraries are linked with the same runtime. I have seen weird  
segfaults using std::string when linking debug binaries with binaries built 
using release mode.

Apparently Microsofts debug and release runtimes have different implementations 
of std::string leading to misalignment and overflow when passing strings 
between modules.

Regards,
Phil

On 12/01/2013, at 12:44 AM, DavidHornung horn...@googlemail.com wrote:

 Hi Robert,
 
 i have tested you tip, but it in my case it seems not to work.
 I only call the setText() method via my NodeVisitor, also run the viewer in 
 SingleThreaded mode, and set text-setDataVariance(osg::Object::DYNAMIC).
 what else could be wrong?
 
 David
 Hi David,
 
 Best guess would be that you are running the viewer multi-threaded
 (it's default if you have a multicore processor) and the update
 traversal to the text is occurring at the same time as the draw
 traversal that is reading.  The solution is to tell the scene graph
 that you plan to dynamically update the text object so that it knows
 not to overlap the update/event and draw traversals.  You can do this
 by using text-setDataVariance(osg::Object::DYNAMIC);
 
 Robert.
 
 On 10 January 2013 16:41, DavidHornung horn...@googlemail.com wrote:
 Hello,
 i have a seg fault because the osgText::Text::setText(std::string) is not
 thread-save.
 It appears from type to time
 
 Why get I this seg fault sometimes?
 
 I have the following setup
 
 class ObjectGroup : public osg::Group
 {
 ...
ObjectGroup()
   {
...
text = osgText::Text;

this-addChild(text);
this-setUpdateCallback(new ObjectNodeCallback);
   }
 
 //called from NodeCallback
   void updateText()
   {
 text-setText(myText);
}
 
 private:
osgText::Text text;
std::String myText;
 ...
 };
 
 class ObjectNodeCallback : public osg::NodeCallback
 {
 //override
 operator ()(osg::Node* node, osg::NodeVisitor* nv)
 {
 osg::ref_ptrObjectGroup obj =
 dynamic_castObjectGroup*(node);
 obj-updateText();
 traverse(node, nv);
 }
 };
 
 
 Cheers,
 David
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
 
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] seg fault with text-setText(mystring) called in NodeCallback

2013-01-11 Thread DavidHornung

Hi Robert,

i have tested you tip, but it in my case it seems not to work.
I only call the setText() method via my NodeVisitor, also run the viewer 
in SingleThreaded mode, and set text-setDataVariance(osg::Object::DYNAMIC).

what else could be wrong?

David

Hi David,

Best guess would be that you are running the viewer multi-threaded
(it's default if you have a multicore processor) and the update
traversal to the text is occurring at the same time as the draw
traversal that is reading.  The solution is to tell the scene graph
that you plan to dynamically update the text object so that it knows
not to overlap the update/event and draw traversals.  You can do this
by using text-setDataVariance(osg::Object::DYNAMIC);

Robert.

On 10 January 2013 16:41, DavidHornung horn...@googlemail.com wrote:

Hello,
i have a seg fault because the osgText::Text::setText(std::string) is not
thread-save.
It appears from type to time

Why get I this seg fault sometimes?

I have the following setup

class ObjectGroup : public osg::Group
{
...
 ObjectGroup()
{
 ...
 text = osgText::Text;
 
 this-addChild(text);
 this-setUpdateCallback(new ObjectNodeCallback);
}

//called from NodeCallback
void updateText()
{
  text-setText(myText);
 }

private:
 osgText::Text text;
 std::String myText;
...
};

class ObjectNodeCallback : public osg::NodeCallback
{
  //override
  operator ()(osg::Node* node, osg::NodeVisitor* nv)
  {
  osg::ref_ptrObjectGroup obj =
dynamic_castObjectGroup*(node);
  obj-updateText();
  traverse(node, nv);
  }
};


Cheers,
David
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] seg fault with text-setText(mystring) called in NodeCallback

2013-01-11 Thread Robert Osfield
On 11 January 2013 11:44, DavidHornung horn...@googlemail.com wrote:
 Hi Robert,

 i have tested you tip, but it in my case it seems not to work.
 I only call the setText() method via my NodeVisitor, also run the viewer in
 SingleThreaded mode, and set text-setDataVariance(osg::Object::DYNAMIC).
 what else could be wrong?

Again I can only guess - it's you who has the seg fault and the
ability to debug it, best guess now is a dangling pointer?

Try using ref_ptr rather than C pointers.

Robert.
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


[osg-users] seg fault with text-setText(mystring) called in NodeCallback

2013-01-10 Thread DavidHornung

Hello,
i have a seg fault because the osgText::Text::setText(std::string) is 
not thread-save.

It appears from type to time

Why get I this seg fault sometimes?

I have the following setup

class ObjectGroup : public osg::Group
{
...
ObjectGroup()
   {
...
text = osgText::Text;

this-addChild(text);
this-setUpdateCallback(new ObjectNodeCallback);
   }

//called from NodeCallback
   void updateText()
   {
 text-setText(myText);
}

private:
osgText::Text text;
std::String myText;
...
};

class ObjectNodeCallback : public osg::NodeCallback
{
 //override
 operator ()(osg::Node* node, osg::NodeVisitor* nv)
 {
 osg::ref_ptrObjectGroup obj = 
dynamic_castObjectGroup*(node);

 obj-updateText();
 traverse(node, nv);
 }
};


Cheers,
David
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] seg fault with text-setText(mystring) called in NodeCallback

2013-01-10 Thread Robert Osfield
Hi David,

Best guess would be that you are running the viewer multi-threaded
(it's default if you have a multicore processor) and the update
traversal to the text is occurring at the same time as the draw
traversal that is reading.  The solution is to tell the scene graph
that you plan to dynamically update the text object so that it knows
not to overlap the update/event and draw traversals.  You can do this
by using text-setDataVariance(osg::Object::DYNAMIC);

Robert.

On 10 January 2013 16:41, DavidHornung horn...@googlemail.com wrote:
 Hello,
 i have a seg fault because the osgText::Text::setText(std::string) is not
 thread-save.
 It appears from type to time

 Why get I this seg fault sometimes?

 I have the following setup

 class ObjectGroup : public osg::Group
 {
 ...
 ObjectGroup()
{
 ...
 text = osgText::Text;
 
 this-addChild(text);
 this-setUpdateCallback(new ObjectNodeCallback);
}

 //called from NodeCallback
void updateText()
{
  text-setText(myText);
 }

 private:
 osgText::Text text;
 std::String myText;
 ...
 };

 class ObjectNodeCallback : public osg::NodeCallback
 {
  //override
  operator ()(osg::Node* node, osg::NodeVisitor* nv)
  {
  osg::ref_ptrObjectGroup obj =
 dynamic_castObjectGroup*(node);
  obj-updateText();
  traverse(node, nv);
  }
 };


 Cheers,
 David
 ___
 osg-users mailing list
 osg-users@lists.openscenegraph.org
 http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org