← Back to team overview

yade-dev team mailing list archive

[svn] r1468 - eudoxos

 

------------------------------------------------------------------------
r1468 | eudoxos | 2008-08-14 19:17:50 +0200 (czw, 14 sie 2008) | 3 lines
Changed paths:
   M /trunk/core/Omega.cpp
   M /trunk/core/yade.cpp

1. Remove draw mutex when loading simulation introduced a few days ago (may throw boost::lock_error under some conditions)
2. Restore default signal handlers before exit from main; set SEGV handler to nullHandler since on i386 we (on lenny consistently) get crashes in some log4cxx destructor.

------------------------------------------------------------------------
Index: core/yade.cpp
===================================================================
--- core/yade.cpp	(revision 1467)
+++ core/yade.cpp	(revision 1468)
@@ -37,7 +37,7 @@
 #endif
 
 void nullHandler(int sig){
-	cerr<<"nullHandler called"<<endl;
+	cerr<<"WARN: nullHandler, signal "<<(sig==SIGSEGV?"SEGV":"[other]")<<endl;
 }
 
 void
@@ -252,6 +252,8 @@
 		// Py_Finalize(); // FIXME: http://www.boost.org/libs/python/todo.html#pyfinalize-safety says this is unsafe with boost::python
 	#endif
 	#ifdef YADE_DEBUG
+		signal(SIGABRT,SIG_DFL); signal(SIGHUP,SIG_DFL); // default handlers
+		signal(SIGSEGV,nullHandler); // FIXME: this is to cover up crash that occurs in log4cxx on i386 sometimes 
 		unlink(Omega::instance().gdbCrashBatch.c_str());
 	#endif
 
Index: core/Omega.cpp
===================================================================
--- core/Omega.cpp	(revision 1467)
+++ core/Omega.cpp	(revision 1468)
@@ -231,18 +231,20 @@
 	LOG_INFO("Loading file " + simulationFileName);
 
 	// FIXME: stop rendering during loading - may lead to crash
-	boost::mutex::scoped_lock lock1(rootBody->transientInteractions->drawloopmutex);
-	boost::mutex::scoped_lock lock2(rootBody->persistentInteractions->drawloopmutex);
+	{
+		//boost::mutex::scoped_lock lock1(rootBody->persistentInteractions->drawloopmutex);
+		//boost::mutex::scoped_lock lock2(rootBody->transientInteractions->drawloopmutex);
 		
-	if(algorithm::ends_with(simulationFileName,".xml") || algorithm::ends_with(simulationFileName,".xml.gz") || algorithm::ends_with(simulationFileName,".xml.bz2")){
-		resetRootBody();
-		IOFormatManager::loadFromFile("XMLFormatManager",simulationFileName,"rootBody",rootBody);
+		if(algorithm::ends_with(simulationFileName,".xml") || algorithm::ends_with(simulationFileName,".xml.gz") || algorithm::ends_with(simulationFileName,".xml.bz2")){
+			resetRootBody();
+			IOFormatManager::loadFromFile("XMLFormatManager",simulationFileName,"rootBody",rootBody);
+		}
+		else if(algorithm::ends_with(simulationFileName,".yade")){
+			resetRootBody();
+			IOFormatManager::loadFromFile("BINFormatManager",simulationFileName,"rootBody",rootBody);
+		}
+		else throw (yadeBadFile("Extension of file not recognized."));
 	}
-	else if(algorithm::ends_with(simulationFileName,".yade")){
-		resetRootBody();
-		IOFormatManager::loadFromFile("BINFormatManager",simulationFileName,"rootBody",rootBody);
-	}
-	else throw (yadeBadFile("Extension of file not recognized."));
 
 	if( rootBody->getClassName() != "MetaBody") throw yadeBadFile("Wrong file format (rootBody is not a MetaBody!) ??");