Hello again!
Thanks for your reply Robert. I want to apologise because I was wrong when I
said that the problem goes away when you remove the _log<<message line. Even if
I have an empty osg::NotifyHandler::notify() function, it will still crush
(although it might take some time)! This is what I have now:
Code:
#include <osg/Group>
#include <osg/Notify>
#include <osgViewer/Viewer>
class LogFileHandler : public osg::NotifyHandler
{
public:
LogFileHandler(void) {}
void notify( osg::NotifySeverity severity, const char* message ) {}
protected:
~LogFileHandler(void) {}
};
int main( int agc, char** argv )
{
osg::setNotifyLevel(osg::DEBUG_FP);
osg::Group* root = new osg::Group();
LogFileHandler* fileHandler = new LogFileHandler();
osg::setNotifyHandler(fileHandler);
osgViewer::Viewer viewer;
viewer.setSceneData(root);
viewer.setUpViewInWindow(50,50,800,600);
viewer.run();
return 0;
}
Here is a call stack from the crush:
Code:
msvcr90d.dll!operator delete(void * pUserData=0x00908740) Line 52 + 0x51 bytes
C++
msvcp90d.dll!std::allocator<unsigned short>::deallocate(unsigned short *
_Ptr=0x00908740, unsigned int __formal=102) Line 146 + 0x9 bytes C++
msvcp90d.dll!std::basic_stringbuf<char,std::char_traits<char>,std::allocator<char>
>::overflow(int _Meta=0) Line 148 C++
msvcp90d.dll!std::basic_streambuf<char,std::char_traits<char> >::sputc(char
_Ch=0) Line 163 + 0x4a bytes C++
osg80-osgd.dll!osg::NotifyStreamBuffer::sync() Line 73 + 0xd bytes C++
msvcp90d.dll!std::basic_streambuf<unsigned short,std::char_traits<unsigned
short> >::pubsync() Line 101 C++
msvcp90d.dll!std::basic_ostream<unsigned short,std::char_traits<unsigned short>
>::flush() Line 552 + 0x30 bytes C++
msvcp90d.dll!std::endl(std::basic_ostream<char,std::char_traits<char> > &
_Ostr={...}) Line 975 C++
msvcp90d.dll!std::basic_ostream<unsigned short,std::char_traits<unsigned short>
>::operator<<(std::basic_ostream<unsigned short,std::char_traits<unsigned
short> > & (std::basic_ostream<unsigned short,std::char_traits<unsigned short>
> &)* _Pfn=0x65983a20) Line 173 + 0x7 bytes C++
osg80-osgViewerd.dll!osgViewer::Renderer::draw() Line 645 + 0x63 bytes C++
Although the last 4 calls (sputc() call to operator delete call) are the same
most of the time.
Any ideas what is going on? Are all the classes and functions invoked after
using basic_ostream::operator<< supposed to be thread safe? If not, does OSG
access these functions in a thread-safe way?
It crushes on both OSG 3.0.0 and 3.0.1 (two different machines). With visual
Studio 2008 SP1 and Win7x64.
Thanks a lot for your time.
Cheers,
George
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44167#44167
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org