Salome HOME
Management of :
[modules/kernel.git] / src / SALOMETraceCollector / SALOMETraceCollector.cxx
index 655230147937cfd490d521a2cbc486083459327d..82fdc3e67e9d56445eadec25868b6a2bf074f560 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include <cstdlib>
 #include <omniORB4/CORBA.h>
 
+#include "Utils_SALOME_Exception.hxx"
 #include "SALOMETraceCollector.hxx"
 #include "TraceCollector_WaitForServerReadiness.hxx"
 #include <SALOMEconfig.h>
 #include CORBA_CLIENT_HEADER(Logger)
 
-// Class attributes initialisation, for class method SALOMETraceCollector::run
-
-CORBA::ORB_ptr SALOMETraceCollector::_orb = 0;
-
 // ============================================================================
 /*!
  *  This class is for use with CORBA, inside SALOME.
@@ -56,15 +53,10 @@ BaseTraceCollector* SALOMETraceCollector::instance()
 {
   if (_singleton == 0) // no need of lock when singleton already exists
     {
-      int ret;
-      ret = pthread_mutex_lock(&_singletonMutex); // acquire lock to be alone
+      pthread_mutex_lock(&_singletonMutex);    // acquire lock to be alone
       if (_singleton == 0)                     // another thread may have got
         {                                      // the lock after the first test
           BaseTraceCollector* myInstance = new SALOMETraceCollector();
-          int argc=0;
-          char *_argv=0;
-          char ** argv = &_argv;
-          _orb = CORBA::ORB_init (argc, argv);
 
           sem_init(&_sem,0,0); // to wait until run thread is initialized
           pthread_t traceThread;
@@ -74,7 +66,7 @@ BaseTraceCollector* SALOMETraceCollector::instance()
           sem_wait(&_sem);
           _singleton = myInstance; // _singleton known only when init done
         }
-      ret = pthread_mutex_unlock(&_singletonMutex); // release lock
+      pthread_mutex_unlock(&_singletonMutex); // release lock
     }
   return _singleton;
 }
@@ -82,7 +74,7 @@ BaseTraceCollector* SALOMETraceCollector::instance()
 // ============================================================================
 /*!
  *  In a separate thread, loop to print traces.
- *  Mutex guarantees intialisation on instance method is done and only one run
+ *  Mutex guarantees initialisation on instance method is done and only one run
  *  allowed (double check ...)
  *  Loop until there is no more buffer to print,
  *  and no ask for end from destructor.
@@ -90,7 +82,7 @@ BaseTraceCollector* SALOMETraceCollector::instance()
  */
 // ============================================================================
 
-void* SALOMETraceCollector::run(void *bid)
+void* SALOMETraceCollector::run(void* /*bid*/)
 {
   _threadId = new pthread_t;
   *_threadId = pthread_self();
@@ -102,7 +94,7 @@ void* SALOMETraceCollector::run(void *bid)
   SALOME_Logger::Logger_var m_pInterfaceLogger;
   CORBA::Object_var obj;
 
-  obj = TraceCollector_WaitForServerReadiness(_orb,"Logger");
+  obj = TraceCollector_WaitForServerReadiness("Logger");
   if (!CORBA::is_nil(obj))
     m_pInterfaceLogger = SALOME_Logger::Logger::_narrow(obj);
   if (CORBA::is_nil(m_pInterfaceLogger))
@@ -131,7 +123,8 @@ void* SALOMETraceCollector::run(void *bid)
         }
 
       myTraceBuffer->retrieve(myTrace);
-      if (!CORBA::is_nil(_orb))
+      //if (!CORBA::is_nil(_orb))
+      if (true)
         {
           if (myTrace.traceType == ABORT_MESS)
             {
@@ -176,8 +169,7 @@ void* SALOMETraceCollector::run(void *bid)
 
 SALOMETraceCollector:: ~SALOMETraceCollector()
 {
-  int ret;
-  ret = pthread_mutex_lock(&_singletonMutex); // acquire lock to be alone
+  pthread_mutex_lock(&_singletonMutex); // acquire lock to be alone
   if (_singleton)
     {
       DEVTRACE("SALOMETraceCollector:: ~SALOMETraceCollector()");
@@ -187,15 +179,15 @@ SALOMETraceCollector:: ~SALOMETraceCollector()
       if (_threadId)
         {
           int ret = pthread_join(*_threadId, NULL);
-          if (ret) std::cerr << "error close SALOMETraceCollector : "<< ret << std::endl;
-          else DEVTRACE("SALOMETraceCollector destruction OK");
+          if (ret) { std::cerr << "error close SALOMETraceCollector : "<< ret << std::endl; }
+          else { DEVTRACE("SALOMETraceCollector destruction OK") };
           delete _threadId;
           _threadId = 0;
           _threadToClose = 0;
         }
       _singleton = 0;
     }
-  ret = pthread_mutex_unlock(&_singletonMutex); // release lock
+  pthread_mutex_unlock(&_singletonMutex); // release lock
 }
 
 // ============================================================================
@@ -217,11 +209,23 @@ SALOMETraceCollector::SALOMETraceCollector()
  */
 // ============================================================================
 
+#include "KernelBasis.hxx"
+#include "SALOME_Logger_Server.hxx"
+#include "SALOME_Fake_NamingService.hxx"
+
+#include <memory>
+
 extern "C"
 {
  SALOMETRACECOLLECTOR_EXPORT
   BaseTraceCollector *SingletonInstance(void)
   {
+    if(getSSLMode())
+    {
+      SALOME_Logger::Logger_var logger = KERNEL::getLoggerServantSA();
+      std::unique_ptr<SALOME_Fake_NamingService> ns(new SALOME_Fake_NamingService);
+      ns->Register(logger,"/Logger");
+    }
     BaseTraceCollector *instance = SALOMETraceCollector::instance();
     return instance;
   }