Salome HOME
Fix compilation pb.
[modules/kernel.git] / src / SALOMELocalTrace / FileTraceCollector.cxx
index ce198400fb0c7cc2f36403e85a4a7dac9e564196..f76e18ef6dd64f277c0e2dfbbd8c798e583b576c 100644 (file)
@@ -15,7 +15,7 @@
 //  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
@@ -31,6 +31,7 @@
 
 using namespace std;
 
+//#define _DEVDEBUG_
 #include "FileTraceCollector.hxx"
 
 // Class attributes initialisation, for class method FileTraceCollector::run
@@ -57,16 +58,17 @@ BaseTraceCollector* FileTraceCollector::instance(const char *fileName)
       if (_singleton == 0)                     // another thread may have got
        {                                      // the lock after the first test
          DEVTRACE("FileTraceCollector:: instance()");
-         _singleton = new FileTraceCollector();
+         BaseTraceCollector* myInstance = new FileTraceCollector();
          _fileName = fileName;
          DEVTRACE(" _fileName: " << _fileName);
 
          sem_init(&_sem,0,0); // to wait until run thread is initialized
          pthread_t traceThread;
-         int bid;
+         int bid = 0;
          int re2 = pthread_create(&traceThread, NULL,
                                   FileTraceCollector::run, (void *)bid);
          sem_wait(&_sem);
+         _singleton = myInstance; // _singleton known only when init done
          DEVTRACE("FileTraceCollector:: instance()-end");
        }
       ret = pthread_mutex_unlock(&_singletonMutex); // release lock
@@ -87,6 +89,7 @@ BaseTraceCollector* FileTraceCollector::instance(const char *fileName)
 
 void* FileTraceCollector::run(void *bid)
 {
+  //DEVTRACE("init run");
   _threadId = new pthread_t;
   *_threadId = pthread_self();
   sem_post(&_sem); // unlock instance
@@ -99,6 +102,7 @@ void* FileTraceCollector::run(void *bid)
 
   ofstream traceFile;
   const char *theFileName = _fileName.c_str();
+  DEVTRACE("try to open trace file "<< theFileName);
   traceFile.open(theFileName, ios::out | ios::app);
   if (!traceFile)
     {
@@ -108,7 +112,7 @@ void* FileTraceCollector::run(void *bid)
 
   // --- Loop until there is no more buffer to print,
   //     and no ask for end from destructor.
-
+  DEVTRACE("Begin loop");
   while ((!_threadToClose) || myTraceBuffer->toCollect() )
     {
       if (_threadToClose)
@@ -182,8 +186,8 @@ FileTraceCollector:: ~FileTraceCollector()
          _threadToClose = 0;
        }
       _singleton = 0;
-      ret = pthread_mutex_unlock(&_singletonMutex); // release lock
     }
+  ret = pthread_mutex_unlock(&_singletonMutex); // release lock
 }
 
 // ============================================================================