-// SALOME Basics : general SALOME definitions and tools (C++ part - no CORBA)
+// Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE
//
-// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
+// SALOME Basics : general SALOME definitions and tools (C++ part - no CORBA)
// File : BasicGenericDestructor.cxx
// Author : Antoine YESSAYAN, Paul RASCLE, EDF
// Module : SALOME
// $Header$
-
+//
#include <iostream>
#include <list>
#include <cstdlib>
#include "BasicsGenericDestructor.hxx"
-using namespace std;
-
void HouseKeeping();
std::list<PROTECTED_DELETE*> PROTECTED_DELETE::_objList;
-//CCRT
-pthread_mutex_t PROTECTED_DELETE::_listMutex = PTHREAD_MUTEX_INITIALIZER ;
-//pthread_mutex_t PROTECTED_DELETE::_listMutex ;
+#ifndef WIN32
+pthread_mutex_t PROTECTED_DELETE::_listMutex;
+#else
+pthread_mutex_t PROTECTED_DELETE::_listMutex =
+ PTHREAD_MUTEX_INITIALIZER;
+#endif
std::list<GENERIC_DESTRUCTOR*> *GENERIC_DESTRUCTOR::Destructors = 0;
static bool atExitSingletonDone = false ;
return;
else
{
- int ret;
- ret = pthread_mutex_lock(&_listMutex); // acquire lock, an check again
- if (std::find(_objList.begin(), _objList.end(), anObject)
- != _objList.end())
- {
- DEVTRACE("PROTECTED_DELETE::deleteInstance1 " << anObject);
- delete anObject;
- DEVTRACE("PROTECTED_DELETE::deleteInstance2 " << &_objList);
- _objList.remove(anObject);
- }
- ret = pthread_mutex_unlock(&_listMutex); // release lock
+ pthread_mutex_lock(&_listMutex); // acquire lock, an check again
+ if (std::find(_objList.begin(), _objList.end(), anObject)
+ != _objList.end())
+ {
+ DEVTRACE("PROTECTED_DELETE::deleteInstance1 " << anObject);
+ delete anObject;
+ DEVTRACE("PROTECTED_DELETE::deleteInstance2 " << &_objList);
+ _objList.remove(anObject);
+ }
+ pthread_mutex_unlock(&_listMutex); // release lock
}
}
{
if (Make_ATEXIT && !atExitSingletonDone)
{
- DEVTRACE("atExitSingleton(" << Make_ATEXIT << ")");
- assert(GENERIC_DESTRUCTOR::Destructors == 0);
- GENERIC_DESTRUCTOR::Destructors = new std::list<GENERIC_DESTRUCTOR*>;
- int cr = atexit(HouseKeeping);
- assert(cr == 0);
- atExitSingletonDone = true;
+ DEVTRACE("atExitSingleton(" << Make_ATEXIT << ")");
+ assert(GENERIC_DESTRUCTOR::Destructors == 0);
+ GENERIC_DESTRUCTOR::Destructors = new std::list<GENERIC_DESTRUCTOR*>;
+#ifndef _DEBUG_
+ atexit(HouseKeeping);
+#else
+ int cr = atexit(HouseKeeping);
+ assert(cr == 0);
+#endif
+ atExitSingletonDone = true;
}
}
if(GENERIC_DESTRUCTOR::Destructors->size())
{
std::list<GENERIC_DESTRUCTOR*>::iterator it =
- GENERIC_DESTRUCTOR::Destructors->end();
+ GENERIC_DESTRUCTOR::Destructors->end();
do
- {
- it-- ;
- GENERIC_DESTRUCTOR* ptr = *it ;
- DEVTRACE("HouseKeeping() " << typeid(ptr).name());
- (*ptr)();
- delete ptr ;
- }
+ {
+ it-- ;
+ GENERIC_DESTRUCTOR* ptr = *it ;
+ DEVTRACE("HouseKeeping() " << typeid(ptr).name());
+ (*ptr)();
+ delete ptr ;
+ }
while (it != GENERIC_DESTRUCTOR::Destructors->begin()) ;
DEVTRACE("HouseKeeping() end list ");
delete GENERIC_DESTRUCTOR::Destructors;
GENERIC_DESTRUCTOR::Destructors = 0;
+ atExitSingletonDone = false ;
DEVTRACE("HouseKeeping() very end ");
return ;
}
*/
// ============================================================================
-const int GENERIC_DESTRUCTOR::Add(GENERIC_DESTRUCTOR &anObject)
+int GENERIC_DESTRUCTOR::Add(GENERIC_DESTRUCTOR &anObject)
{
DEVTRACE("GENERIC_DESTRUCTOR::Add("<<typeid(anObject).name()<<") "
- << &anObject);
+ << &anObject);
if (!atExitSingletonDone)
{
HouseKeeper = atExitSingleton(true);
}
assert(Destructors);
Destructors->push_back(&anObject);
- return Destructors->size();
+ return (int)Destructors->size();
}