Index: mbdyn/base/dataman.cc
===================================================================
RCS file: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/base/dataman.cc,v
retrieving revision 1.122
retrieving revision 1.124
diff -u -r1.122 -r1.124
--- mbdyn/base/dataman.cc	12 Aug 2010 20:32:00 -0000	1.122
+++ mbdyn/base/dataman.cc	17 Aug 2010 04:41:40 -0000	1.124
@@ -193,7 +193,10 @@
 {
 	DEBUGCOUTFNAME("DataManager::DataManager");
 
-	mbdyn_cleanup_register(datamanager_cleanup, (void *)this);
+	ppCleanupData = new DataManager*;
+	*ppCleanupData = this;
+
+	mbdyn_cleanup_register(datamanager_cleanup, (void *)ppCleanupData);
 
 	/* pseudocostruttori */
 	ElemManager();
@@ -606,6 +609,8 @@
 
 DataManager::~DataManager(void)
 {
+	*ppCleanupData = 0;
+
 	/* Se e' richiesto il file di restart, il distruttore del DataManager
 	 * crea il file e forza gli oggetti a scrivere il loro contributo nel modo
 	 * opportuno
@@ -890,10 +895,19 @@
 extern "C" int
 datamanager_cleanup(void *data)
 {
-	DataManager *pDM = (DataManager *)data;
+	int rc = 0;
+
+	DataManager **p = (DataManager **)data;
+	if (*p) {
+		DataManager *pDM = (DataManager *)*p;
+
+		silent_cerr("DataManager cleanup" << std::endl);
+
+		rc = pDM->Cleanup();
+	}
 
-	silent_cerr("DataManager cleanup" << std::endl);
+	delete p;
 
-	return pDM->Cleanup();
+	return rc;
 }
 
Index: mbdyn/base/dataman.h
===================================================================
RCS file: /var/cvs/mbdyn/mbdyn/mbdyn-1.0/mbdyn/base/dataman.h,v
retrieving revision 1.150
retrieving revision 1.151
diff -u -r1.150 -r1.151
--- mbdyn/base/dataman.h	1 Apr 2010 22:44:31 -0000	1.150
+++ mbdyn/base/dataman.h	17 Aug 2010 04:34:36 -0000	1.151
@@ -82,6 +82,8 @@
 	public DataManagerErrors {
 
 protected:
+	DataManager **ppCleanupData;
+
 #ifdef USE_MULTITHREAD
 	/* from input file, or auto-detected */
 	unsigned int nThreads;

