Page 1 of 1

Crash at root creation deletion

Posted: Mon Feb 14, 2005 3:27 pm
by _lkoikm
at creation :

Code: Select all

 try{
	try
	{
		mRoot = new Root(); 
                                //some other lines...

                }
                 catch(Ogre::Exception &e)
	{
		Ogre::String s = "OgreApp::Init() - Exception:\n" + e.getFullDescription() + "\n";
		LogManager::getSingleton().logMessage(s, LML_CRITICAL);
		#undef MessageBox
		System::Windows::Forms::MessageBox::Show(e.getFullDescription().c_str(), "Exception!");

		// Clean up.
		if(mRoot)
			delete mRoot;
		mRoot=NULL;
		mReady=false;
		//Application::Exit();
	}
	}
	catch(...)
	{
		mRoot=NULL;
		mReady=false;
		Trace::WriteLine("ERROR O INIT");
	}
call stack is :

Code: Select all

 	NTDLL.DLL!77f813b1() 	
 	NTDLL.DLL!77fb76aa() 	
 	NTDLL.DLL!77fa688d() 	
 	NTDLL.DLL!77fa65d9() 	
 	NTDLL.DLL!77f8c5e1() 	
 	NTDLL.DLL!77f8c60d() 	
 	NTDLL.DLL!77fa65d9() 	
 	NTDLL.DLL!77f8c5e1() 	
 	NTDLL.DLL!77f8c60d() 	
 	NTDLL.DLL!77fa65d9() 	
 	NTDLL.DLL!77f8c60d() 	
 	NTDLL.DLL!77fb5367() 	
 	NTDLL.DLL!77fa64f6() 	
 	NTDLL.DLL!77fb5305() 	
 	NTDLL.DLL!77fa64f6() 	
 	NTDLL.DLL!77fa64f6() 	
 	NTDLL.DLL!77f8f18b() 	
 	NTDLL.DLL!77fb5542() 	
 	NTDLL.DLL!77f8f40c() 	
 	NTDLL.DLL!77fa64f6() 	
 	NTDLL.DLL!77f967ce() 	
 	NTDLL.DLL!77f967f0() 	
 	mscorwks.dll!00c17e52() 	
 	mscorwks.dll!00c17e52() 	
 	NTDLL.DLL!77fcc9e3() 	
 	mscorwks.dll!00c17e52() 	
 	NTDLL.DLL!77f967f0() 	
 	mscorwks.dll!00c17e52() 	
 	NTDLL.DLL!77fcc9e3() 	
 	mscorwks.dll!00c394bc() 	
 	mscorwks.dll!00c4d194() 	
 	mscorwks.dll!00c3addf() 	
 	mscorwks.dll!00c394bc() 	
 	mscorwks.dll!00c4d194() 	
 	mscorwks.dll!00c4d1cd() 	
 	mscorwks.dll!00c37b2f() 	
 	mscorwks.dll!00c4d086() 	
 	mscorwks.dll!00c4d1e7() 	
>	msvcr71d.dll!_heap_alloc_base(unsigned int size=116)  Line 212	C
 	msvcr71d.dll!_heap_alloc_dbg(unsigned int nSize=80, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Line 397 + 0x9	C
 	msvcr71d.dll!_nh_malloc_dbg(unsigned int nSize=80, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0)  Line 260 + 0x15	C
 	msvcr71d.dll!malloc(unsigned int nSize=80)  Line 139 + 0x15	C
 	OgreMain_d.dll!Ogre::MemoryManager::allocMem(const char * sourceFile=0x117961a8, const unsigned int sourceLine=0, const char * sourceFunc=0x117961a8, const unsigned int allocationType=1, const unsigned int reportedSize=48, const unsigned int processID=1)  Line 732 + 0xe	C++
 	OgreMain_d.dll!Ogre::MemoryManager::op_new_sc(unsigned int reportedSize=48, unsigned int processID=1)  Line 1429 + 0x20	C++
 	OgreMain_d.dll!operator new(unsigned int reportedSize=48)  Line 351	C++
 	OgreMain_d.dll!std::_Allocate<std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >::_Node>(unsigned int _Count=1, std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >::_Node * __formal=0x00000000)  Line 34 + 0xc	C++
 	OgreMain_d.dll!std::allocator<std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >::_Node>::allocate(unsigned int _Count=1)  Line 137 + 0xb	C++
 	OgreMain_d.dll!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >::_Buynode()  Line 1106 + 0xd	C++
 	OgreMain_d.dll!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >::_Init()  Line 902 + 0x8	C++
 	OgreMain_d.dll!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >(const std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > & _Parg={...}, const std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> > & _Al={...})  Line 363	C++
 	OgreMain_d.dll!std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> > >::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> > >()  Line 103	C++
 	OgreMain_d.dll!Ogre::MaterialSerializer::MaterialSerializer()  Line 1963 + 0x77	C++
 	OgreMain_d.dll!Ogre::MaterialManager::MaterialManager()  Line 53 + 0x6d	C++
 	OgreMain_d.dll!Ogre::Root::Root(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & pluginFileName={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & configFileName={...}, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & logFileName={...})  Line 161 + 0x58	C++
 	04ec1b9c()	
 	okontrolka.dll!OPanel.initOgre() Line 41 + 0xd1 bytes	C++
also i got a crash at deleting root
code is :

Code: Select all

			mutex->WaitOne();
			try
			 {
			  if(mRoot!=NULL) delete(mRoot);
		                 }
			catch(System::Exception *e)
			 {
				 mutex->ReleaseMutex();
				 Trace::WriteLine("OGRE :: ERROR ~ROOT()");
				 //throw(e);
				 return;
			 }
			mutex->ReleaseMutex();
and call stack is :

Code: Select all

NTDLL.DLL!77f813b1() 	
NTDLL.DLL!77fb76aa() 	
NTDLL.DLL!77fcfdda() 	
NTDLL.DLL!77f96745() 	
NTDLL.DLL!77fb5c15() 	
NTDLL.DLL!77fa6afc() 	
OgreMain_d.dll!std::allocator<std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >::_Node>::deallocate(std::_Tree_nod<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &),std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,bool (__cdecl*)(std::basic_string<char,std::char_traits<char>,std::allocator<char> > &,Ogre::MaterialScriptContext &)> >,0> >::_Node * _Ptr=0x10560000, unsigned int __formal=1073741920)  Line 133 + 0x10	C++
msvcr71d.dll!_free_base(void * pBlock=0x10df3638)  Line 103	C
msvcr71d.dll!_free_dbg_lk(void * pUserData=0x10df3658, int nBlockUse=1)  Line 1207 + 0x9	C
msvcr71d.dll!_free_dbg(void * pUserData=0x10df3658, int nBlockUse=1)  Line 1070 + 0xd	C
msvcr71d.dll!operator delete(void * pUserData=0x10df3658)  Line 54 + 0x10	C++
msvcp71d.dll!std::allocator<char>::deallocate(char * _Ptr=0x10df3658, unsigned int __formal=32)  Line 138 + 0x9	C++
msvcp71d.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Tidy(bool _Built=true, unsigned int _Newsize=0)  Line 1519	C++
msvcp71d.dll!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >()  Line 458	C++
OgreMain_d.dll!Ogre::MaterialScriptContext::~MaterialScriptContext()  + 0x4d	C++
OgreMain_d.dll!Ogre::MaterialSerializer::~MaterialSerializer()  Line 148 + 0x102	C++
OgreMain_d.dll!Ogre::MaterialManager::~MaterialManager()  Line 81 + 0x24	C++
OgreMain_d.dll!Ogre::MaterialManager::`vector deleting destructor'()  + 0x6c	C++
>	OgreMain_d.dll!Ogre::Root::~Root()  Line 264 + 0x6e	C++
exception appears only sometimes....

Posted: Mon Feb 14, 2005 6:37 pm
by sinbad
You're using multithreaded code, and bugs that only occur sometimes are often a result of unpredictable behaviour caused by threading. Try it without threading, I bet it goes away.

What are you using threading for? Are you being careful about not calling into OGRE from 2 different threads?

Posted: Tue Feb 15, 2005 4:52 pm
by _lkoikm
about threading:

i don't use threads explicite , but .NET listeners model works like this (for example Timers, mouse listeners) you do not have any guarantee that events will be scheduled or queed , they can be raised to execute same lines at same time . that is why i use mutexes

i noticed also some problem in waterMesh.h/.cpp used in demo with water which looks like some triangle had one edge in NaN or 1^e20 position , still tracking it.... usually comes appears when i reload model

Code: Select all

mScene->removeEntity(ninjaEntity);
	ninjaEntity = mScene->createEntity("1", path );
	ninjaNode->attachObject(ninjaEntity);