Crash at root creation deletion

Problems building or running the engine, queries about how to use features etc.
Post Reply
_lkoikm
Halfling
Posts: 57
Joined: Fri Feb 11, 2005 7:52 am
Location: Here.

Crash at root creation deletion

Post 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....
User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19269
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 67
Contact:

Post 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?
_lkoikm
Halfling
Posts: 57
Joined: Fri Feb 11, 2005 7:52 am
Location: Here.

Post 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);
Post Reply