]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
PR: bugs 7433 (Splash) and 7435 (SALOMELocalTrace without CORBA), plus trace option...
authorprascle <prascle>
Sun, 9 Jan 2005 18:44:30 +0000 (18:44 +0000)
committerprascle <prascle>
Sun, 9 Jan 2005 18:44:30 +0000 (18:44 +0000)
M bin/launchConfigureParser.py
M bin/runSalome.py
M bin/salome.launch
M bin/salome/runIDLparser.in
M src/Makefile.in
M src/Container/Makefile.in
M src/Container/SALOME_Container.cxx
M src/DataTypeCatalog/Makefile.in
M src/DataTypeCatalog/SALOME_DataTypeCatalog_Server.cxx
M src/Loader/Makefile.in
M src/Loader/SALOME_Session_Loader.cxx
M src/ModuleCatalog/Makefile.in
M src/ModuleCatalog/SALOME_ModuleCatalog_Server.cxx
M src/Registry/Makefile.in
M src/Registry/SALOME_Registry_Server.cxx
M src/RessourcesCatalog/Makefile.in
M src/RessourcesCatalog/SALOME_RessourcesCatalog_Server.cxx
M src/SALOMELocalTrace/LocalTraceCollector.cxx
M src/SALOMELocalTrace/LocalTraceCollector.hxx
R src/SALOMELocalTrace/LocalTrace_WaitForServerReadiness.cxx
R src/SALOMELocalTrace/LocalTrace_WaitForServerReadiness.hxx
M src/SALOMELocalTrace/Makefile.in
A src/SALOMETraceCollector/LocalTrace_WaitForServerReadiness.cxx
A src/SALOMETraceCollector/LocalTrace_WaitForServerReadiness.hxx
A src/SALOMETraceCollector/Makefile.in
A src/SALOMETraceCollector/SALOMETraceCollector.cxx
A src/SALOMETraceCollector/SALOMETraceCollector.hxx
M src/Session/Makefile.in
M src/Session/SALOME_Session_Server.cxx
M src/TestContainer/Makefile.in
M src/TestContainer/TestContainer.cxx

31 files changed:
bin/launchConfigureParser.py
bin/runSalome.py
bin/salome.launch
bin/salome/runIDLparser.in
src/Container/Makefile.in
src/Container/SALOME_Container.cxx
src/DataTypeCatalog/Makefile.in
src/DataTypeCatalog/SALOME_DataTypeCatalog_Server.cxx
src/Loader/Makefile.in
src/Loader/SALOME_Session_Loader.cxx
src/Makefile.in
src/ModuleCatalog/Makefile.in
src/ModuleCatalog/SALOME_ModuleCatalog_Server.cxx
src/Registry/Makefile.in
src/Registry/SALOME_Registry_Server.cxx
src/RessourcesCatalog/Makefile.in
src/RessourcesCatalog/SALOME_RessourcesCatalog_Server.cxx
src/SALOMELocalTrace/LocalTraceCollector.cxx
src/SALOMELocalTrace/LocalTraceCollector.hxx
src/SALOMELocalTrace/LocalTrace_WaitForServerReadiness.cxx [deleted file]
src/SALOMELocalTrace/LocalTrace_WaitForServerReadiness.hxx [deleted file]
src/SALOMELocalTrace/Makefile.in
src/SALOMETraceCollector/LocalTrace_WaitForServerReadiness.cxx [new file with mode: 0644]
src/SALOMETraceCollector/LocalTrace_WaitForServerReadiness.hxx [new file with mode: 0644]
src/SALOMETraceCollector/Makefile.in [new file with mode: 0644]
src/SALOMETraceCollector/SALOMETraceCollector.cxx [new file with mode: 0644]
src/SALOMETraceCollector/SALOMETraceCollector.hxx [new file with mode: 0644]
src/Session/Makefile.in
src/Session/SALOME_Session_Server.cxx
src/TestContainer/Makefile.in
src/TestContainer/TestContainer.cxx

index b673049e990ae8787e1f92cd3ea6b97261f6315a..71781540164a504094444c0075af96fb1a22137b 100755 (executable)
@@ -159,9 +159,12 @@ else:
 for aKey in ("containers","embedded","key","modules","standalone"):
     if not args.has_key(aKey):
         args[aKey]=[]
-for aKey in ("gui","logger","xterm","portkill","killall"):
+for aKey in ("gui","logger","file","xterm","portkill","killall"):
     if not args.has_key(aKey):
         args[aKey]=0
+if args["file"]:
+    afile=args["file"]
+    args["file"]=[afile]
 args["appname"] = appname
 
 ### searching for my port
@@ -237,7 +240,7 @@ except:
 
 opterror=0
 for opt in opts:
-    if not opt in ("h","g","l","x","m","e","s","c","p","k","t"):
+    if not opt in ("h","g","l","f","x","m","e","s","c","p","k","t"):
         print "command line error: -", opt
         opterror=1
 
@@ -250,7 +253,8 @@ if opts.has_key("h"):
     --help or -h                  : print this help
     --gui or -g                   : lancement du GUI
     --terminal -t                 : launching without gui (to deny --gui)
-    --logger or -l                : redirection des messages dans un fichier
+    --logger or -l                : redirection des messages via CORBA
+    --file=filename or -l=filename: redirection des messages dans un fichier
     --xterm or -x                 : les serveurs ouvrent une fenêtre xterm et les messages sont affichés dans cette fenêtre
     --modules=module1,module2,... : où modulen est le nom d'un module Salome à charger dans le catalogue
     or -m=module1,module2,...
@@ -279,6 +283,8 @@ for opt in opts:
         args['gui'] = 1
     elif opt == 'l':
         args['logger'] = 1
+    elif opt == 'f':
+        args['file'] = opts['f']
     elif opt == 'x':
         args['xterm'] = 1
     elif opt == 'm':
index 9cb2cfc675f12c7c16cabf2936d5b73378f6d86c..d7ba78d8d888bb800a35a498622b538e0241ccfb 100755 (executable)
@@ -121,6 +121,8 @@ def set_env(args, modules_list, modules_root_dir):
     # special path for logger lib if needeed
     
     os.environ["SALOME_trace"]="local"
+    if args['file']:
+        os.environ["SALOME_trace"]=args['file'][0]
     if args['logger']:
         os.environ["SALOME_trace"]="with_logger"
         locdir=os.environ['PWD']
index 1b5bbdd1b579140b8b69c8f1ffbaa0ac1493ba6c..92c5eab6de7aa2368bb556b8fd546c2d795278e5 100644 (file)
@@ -2,6 +2,7 @@
        <launchoptions>
                <gui>yes</gui>
                <logger>no</logger>
+               <!-- <file>atrace.log</file> -->
                <xterm>no</xterm>
                <portkill>yes</portkill>
                <killall>no</killall>
index 085ac77d8145c89e857b2e0e7da1f15c254c3872..79e309eb2231493f5aa62c2019646a91500c564a 100644 (file)
@@ -37,9 +37,9 @@ fi
 
 cd $DIR
 
-PYTHONPATH=${PYTHONPATH}:${SALOME_HOME_DIR}/bin
+#PYTHONPATH=${PYTHONPATH}:${SALOME_HOME_DIR}/bin
 #============================================================
 
 # omiidl ====================================================
-omniidl -bIDLparser -I ${SALOME_SRC_DIR}/idl $@
+omniidl -bIDLparser -I ${KERNEL_ROOT_DIR}/idl $@
 #============================================================
index 30881439020ec773099f02f82b04a34c1591c2d3..5cd3980a522bc6324e712cdf28995cfc7f540f5f 100644 (file)
@@ -54,7 +54,7 @@ BIN_SERVER_IDL = SALOME_Component.idl
 CPPFLAGS+= $(PYTHON_INCLUDES) $(MPI_INCLUDE) $(OCC_INCLUDES)
 CXXFLAGS+=$(OCC_CXXFLAGS)
 
-LDFLAGS+= -lSalomeNS -lRegistry -lOpUtil -lSalomeNotification -lSALOMELocalTrace
+LDFLAGS+= -lSalomeNS -lRegistry -lOpUtil -lSalomeNotification -lSALOMELocalTrace -lSALOMETraceCollector
 
 LIBS += @LDEXPDYNFLAGS@ $(PYTHON_LIBS) $(MPI_LIBS) -lCASCatch
 
index 02b2acce44006dfa262a76052d749ad8d235602e..646480535f34b818bd2960e1703ea120254eb82c 100644 (file)
@@ -35,7 +35,7 @@
 #include "SALOME_NamingService.hxx"
 #include "SALOME_Container_i.hxx"
 #include "utilities.h"
-#include "LocalTraceCollector.hxx"
+#include "SALOMETraceCollector.hxx"
 
 #ifdef CHECKTIME
 #include <Utils_Timer.hxx>
@@ -61,7 +61,7 @@ int main(int argc, char* argv[])
   // Initialise the ORB.
   ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
   CORBA::ORB_var &orb = init( argc , argv ) ;
-  LocalTraceCollector *myThreadTrace = LocalTraceCollector::instance(orb);
+  SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
   INFOS_COMPILATION;
   BEGIN_OF(argv[0]);
     
index 5759b3b468fbadaf55f86727ca6a22041b0c1df4..f5bd3bc353d5d298e4e4795a76710ce6bab8f2f7 100644 (file)
@@ -54,6 +54,6 @@ BIN_SERVER_IDL = SALOME_DataTypeCatalog.idl
 
 CPPFLAGS+= $(QT_MT_INCLUDES) 
 CXXFLAGS+= 
-LDFLAGS+= $(QT_MT_LIBS) $(OGL_LIBS) -lSalomeNS -lOpUtil -lSALOMELocalTrace
+LDFLAGS+= $(QT_MT_LIBS) $(OGL_LIBS) -lSalomeNS -lOpUtil -lSALOMELocalTrace -lSALOMETraceCollector
 
 @CONCLUDE@
index 988cd896161285eec27e70914d055af93a47b6cf..d7982916387bc649f68447b8d3df53512fb0f717 100644 (file)
@@ -30,7 +30,7 @@
 #include "SALOME_NamingService.hxx"
 #include "SALOME_DataTypeCatalog_impl.hxx"
 #include "utilities.h"
-#include "LocalTraceCollector.hxx"
+#include "SALOMETraceCollector.hxx"
 #include "Utils_SINGLETON.hxx"
 using namespace std;
 
@@ -38,7 +38,7 @@ int main(int argc,char **argv)
 {
   // initialize the ORB
   CORBA::ORB_ptr orb = CORBA::ORB_init (argc, argv);
-  LocalTraceCollector *myThreadTrace = LocalTraceCollector::instance(orb);
+  SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
   try 
     {
       CosNaming::NamingContext_var _rootContext, catalogContext;
index 972c503b66a45b9d9762329874e57a4c26277bf2..99c98ab060a4a376b12dbcb0b490a0eaa8e47054 100644 (file)
@@ -31,7 +31,7 @@ BIN_CLIENT_IDL = SALOME_Session.idl \
 
 CPPFLAGS+=$(QT_MT_INCLUDES)
 CXXFLAGS+=$(OCC_CXXFLAGS)
-LDFLAGS+=$(QT_MT_LIBS) -lSalomeNS -lOpUtil -lSALOMELocalTrace
+LDFLAGS+=$(QT_MT_LIBS) -lSalomeNS -lOpUtil -lSALOMELocalTrace -lSALOMETraceCollector
 
 
 @CONCLUDE@
index 0db216d3c63524247f2032b54dd5e58cc1afded0..4456b95ed10b6a19c2bda376085e455542dd948b 100644 (file)
@@ -18,7 +18,7 @@
 #include "Utils_SINGLETON.hxx"
 #include "SALOME_NamingService.hxx"
 #include "utilities.h"
-#include "LocalTraceCollector.hxx"
+#include "SALOMETraceCollector.hxx"
 
 //! CORBA client for SALOME Session server : launch GUI
 /*!
@@ -32,7 +32,7 @@ using namespace std;
 int main(int argc, char **argv)
 {
   CORBA::ORB_ptr orb = CORBA::ORB_init(argc,argv) ;
-  LocalTraceCollector *myThreadTrace = LocalTraceCollector::instance(orb);
+  SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
 //VRV: T2.4 - Trace management improvement
   QApplication myQApp(argc, argv) ;
   InquireServersGUI myIS;
index d97b5e791e3291965affc8017dad030349a491ee..8f779b4625c6e85d6eb24081c5d24bf21d9b9b0b 100644 (file)
@@ -33,7 +33,7 @@ VPATH=.:@srcdir@
 @COMMENCE@
 
 ifeq (@WITHIHM@,yes)
-SUBDIRS = MSG2QM SALOMELocalTrace Logger Utils CASCatch PatchQt \
+SUBDIRS = MSG2QM SALOMELocalTrace SALOMETraceCollector Logger Utils CASCatch PatchQt \
           GenericObj MEDWrapper NamingService Registry \
          ModuleCatalog DataTypeCatalog RessourcesCatalog \
           Notification  NOTIFICATION_SWIG \
index 3d9a203c89d273b94246c2667f4e94149d7e7cf6..0ba61bbaabba6be257d4b23c912af01bbca999a6 100644 (file)
@@ -62,6 +62,6 @@ LIB_CLIENT_IDL = SALOME_ModuleCatalog.idl
 BIN_SERVER_IDL = SALOME_ModuleCatalog.idl
 
 CPPFLAGS+= $(QT_MT_INCLUDES) 
-LDFLAGS+= $(QT_MT_LIBS) -lSalomeNS -lOpUtil -lSALOMELocalTrace
+LDFLAGS+= $(QT_MT_LIBS) -lSalomeNS -lOpUtil -lSALOMELocalTrace -lSALOMETraceCollector
 
 @CONCLUDE@
index 942c8f33d108fc7bb7ed2c25c0d94667c387a6d0..9a5fb15ce66863b288c6bf55a43b56a79ab951c6 100644 (file)
@@ -29,7 +29,7 @@
 #include "SALOME_NamingService.hxx"
 #include "SALOME_ModuleCatalog_impl.hxx"
 #include "utilities.h"
-#include "LocalTraceCollector.hxx"
+#include "SALOMETraceCollector.hxx"
 #include "Utils_SINGLETON.hxx"
 
 #ifdef CHECKTIME
@@ -41,7 +41,7 @@ int main(int argc,char **argv)
 {
   // initialize the ORB
   CORBA::ORB_ptr orb = CORBA::ORB_init (argc, argv);
-  LocalTraceCollector *myThreadTrace = LocalTraceCollector::instance(orb);
+  SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
   try 
     {
       CosNaming::NamingContext_var _rootContext, catalogContext;
index 2219e42352da22cd6783650484bd5122a6d95d13..cbcbf39316181a8d79cc72710e6ed892df89e885 100644 (file)
@@ -53,6 +53,6 @@ BIN = SALOME_Registry_Server
 BIN_SRC = 
 BIN_SERVER_IDL = SALOME_Registry.idl
 
-LDFLAGS+= -lSalomeNS -lOpUtil -lSALOMELocalTrace 
+LDFLAGS+= -lSalomeNS -lOpUtil -lSALOMELocalTrace -lSALOMETraceCollector
 
 @CONCLUDE@
index 51036654786859e09a261e2124dfbc65645049f4..d47523a9328a64e2618b2479a02513bf5119e641 100644 (file)
@@ -36,7 +36,7 @@ extern "C"
 }
 
 #include "utilities.h"
-#include "LocalTraceCollector.hxx"
+#include "SALOMETraceCollector.hxx"
 #include "Utils_ORB_INIT.hxx"
 #include "Utils_SINGLETON.hxx"
 #include "Utils_SALOME_Exception.hxx"
@@ -54,7 +54,7 @@ int main( int argc , char **argv )
 {
   ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
   CORBA::ORB_var &orb = init( argc , argv ) ;
-  LocalTraceCollector *myThreadTrace = LocalTraceCollector::instance(orb);
+  SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
   BEGIN_OF( argv[0] )
     INFOS_COMPILATION 
     SCRUTE(argc) 
index c129dad04db3cd5646bf7387fdaa74165438a6e6..b43546776fe645f77269af3d9c88748be8dc09fd 100644 (file)
@@ -54,7 +54,7 @@ BIN_SERVER_IDL = SALOME_RessourcesCatalog.idl
 
 CPPFLAGS+= $(QT_MT_INCLUDES) 
 CXXFLAGS+= 
-LDFLAGS+= $(QT_MT_LIBS) $(OGL_LIBS) -lSalomeNS -lOpUtil -lSALOMELocalTrace
+LDFLAGS+= $(QT_MT_LIBS) $(OGL_LIBS) -lSalomeNS -lOpUtil -lSALOMELocalTrace -lSALOMETraceCollector
 
 @CONCLUDE@
 
index f8018d340dd3956f0caced2f7df376ae8e76487c..b52c63b672bda7cd8765f13a2afa2de3c40ac288 100644 (file)
@@ -30,7 +30,7 @@
 #include "SALOME_NamingService.hxx"
 #include "SALOME_RessourcesCatalog_impl.hxx"
 #include "utilities.h"
-#include "LocalTraceCollector.hxx"
+#include "SALOMETraceCollector.hxx"
 #include "Utils_SINGLETON.hxx"
 using namespace std;
 
@@ -38,7 +38,7 @@ int main(int argc,char **argv)
 {
   // initialize the ORB
   CORBA::ORB_ptr orb = CORBA::ORB_init (argc, argv);
-  LocalTraceCollector *myThreadTrace = LocalTraceCollector::instance(orb);
+  SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
   try
     {
       CosNaming::NamingContext_var _rootContext, catalogContext;
index 0cb334b402b9ae5e64078bfc72499911e15b22e7..de347efd474e87f7cf639b0ac12c25ac4d3000b5 100644 (file)
 #include <sstream>
 #include <fstream>
 #include <cstdlib>
-#include <CORBA.h>
 
 using namespace std;
 
 #include "LocalTraceCollector.hxx"
 #include "LocalTrace_WaitForServerReadiness.hxx"
 //#include "SALOME_Log.hxx"
-#include <SALOMEconfig.h>
-#include CORBA_CLIENT_HEADER(Logger)
 
 // Class attributes initialisation, for class method LocalTraceCollector::run
 
@@ -46,23 +43,20 @@ int LocalTraceCollector::_threadToClose = 0;
 pthread_t LocalTraceCollector::_threadId = 0; // used to control single run
 int LocalTraceCollector::_toFile = 0;
 std::string LocalTraceCollector::_fileName = "";
-CORBA::ORB_ptr LocalTraceCollector::_orb = 0;
 
 // ============================================================================
 /*!
  *  guarantees a unique object instance of the class (singleton thread safe)
  *  a separate thread for loop to print traces is launched.
- *  \param typeTrace 0=standard out, 1=file(/tmp/tracetest.log), 2=CORBA log
+ *  \param typeTrace 0=standard out, 1=file(/tmp/tracetest.log)
  *  If typeTrace=0, checks environment for "SALOME_trace". Test values in
  *  the following order:
  *  - "local"  standard out
- *  - "with_logger" CORBA log
  *  - anything else is kept as a file name
  */
 // ============================================================================
 
-LocalTraceCollector* LocalTraceCollector::instance(CORBA::ORB_ptr theOrb,
-                                                  int typeTrace)
+LocalTraceCollector* LocalTraceCollector::instance(int typeTrace)
 {
   if (_singleton == 0) // no need of lock when singleton already exists
     {
@@ -74,7 +68,7 @@ LocalTraceCollector* LocalTraceCollector::instance(CORBA::ORB_ptr theOrb,
 
          _fileName = "/tmp/tracetest.log";
          _toFile=0;
-         _orb = theOrb;
+
          if (typeTrace)       // caller sets a value different from default=0
            _toFile = typeTrace; 
          else                 // check environment
@@ -84,7 +78,7 @@ LocalTraceCollector* LocalTraceCollector::instance(CORBA::ORB_ptr theOrb,
              if (traceKind)
                {
                  if (strcmp(traceKind,"local")==0) _toFile=0;
-                 else if (strcmp(traceKind,"with_logger")==0) _toFile=2;
+
                  else
                    {
                      _toFile=1;
@@ -135,11 +129,9 @@ void* LocalTraceCollector::run(void *bid)
 
       // if trace in file requested, opens a file with append mode
       // so, several processes can share the same file
-      // if CORBA collection requested, wait for Logger server readiness
+
 
       ofstream traceFile;
-      SALOME_Logger::Logger_var m_pInterfaceLogger;
-      CORBA::Object_var obj;
 
       switch (_toFile)
        {
@@ -154,24 +146,7 @@ void* LocalTraceCollector::run(void *bid)
              }
          }
          break;
-       case 2 :  // --- trace collection via CORBA
-         obj = LocalTrace_WaitForServerReadiness(_orb,"Logger");
-         if (!CORBA::is_nil(obj))
-           m_pInterfaceLogger = SALOME_Logger::Logger::_narrow(obj);
-         if (CORBA::is_nil(m_pInterfaceLogger))
-           {
-             cerr << "Logger server not found ! Abort" << endl;
-             cerr << flush ; 
-             exit(1);
-           } 
-         else
-           {
-             CORBA::String_var LogMsg =
-               CORBA::string_dup("\n---Init logger trace---\n");
-             m_pInterfaceLogger->putMessage(LogMsg);
-             //cout << " Logger server found" << endl;
-           }
-         break;
+
        case 0 : ; // --- trace to standard output
        default :  // --- on standard output, too
          break;
@@ -187,17 +162,6 @@ void* LocalTraceCollector::run(void *bid)
            {
              switch (_toFile)
                {
-               case 2 :  // --- trace collection via CORBA
-                 {
-                   stringstream abortMessage("");
-                   abortMessage << "INTERRUPTION from thread "
-                                << myTrace.threadId << " : " << myTrace.trace;
-                   CORBA::String_var LogMsg =
-                     CORBA::string_dup(abortMessage.str().c_str());
-                   m_pInterfaceLogger->putMessage(LogMsg);
-                   exit(1);
-                 }
-                 break;
                case 1 :  // --- trace to file
                  traceFile << "INTERRUPTION from thread " << myTrace.threadId
                            << " : " <<  myTrace.trace;
@@ -217,16 +181,6 @@ void* LocalTraceCollector::run(void *bid)
            {
              switch (_toFile)
                {
-               case 2 :  // --- trace collection via CORBA
-                 {
-                   stringstream aMessage("");
-                   aMessage << "th. " << myTrace.threadId
-                            << " " << myTrace.trace;
-                   CORBA::String_var LogMsg =
-                     CORBA::string_dup(aMessage.str().c_str());
-                   m_pInterfaceLogger->putMessage(LogMsg);
-                 }
-                 break;
                case 1 :  // --- trace to file
                  traceFile << "th. " << myTrace.threadId
                            << " " << myTrace.trace;
@@ -252,14 +206,15 @@ void* LocalTraceCollector::run(void *bid)
 
 LocalTraceCollector:: ~LocalTraceCollector()
 {
+  LocalTraceBufferPool* myTraceBuffer = LocalTraceBufferPool::instance();
   _threadToClose = 1;
+  myTraceBuffer->insert(NORMAL_MESS,"end of trace "); //needed to wake up thread
   if (_threadId)
     {
       int ret = pthread_join(_threadId, NULL);
       if (ret) cout << "error close LocalTraceCollector : "<< ret << endl;
       else cout << "LocalTraceCollector destruction OK" << endl;
     }
-  LocalTraceBufferPool* myTraceBuffer = LocalTraceBufferPool::instance();
   delete myTraceBuffer;
 }
 
index 90101efd3df0fa3366be5d016ae55f81c231e547..bad9177213dd5f59913e42da1af115b77a874473 100644 (file)
 #define _LOCALTRACECOLLECTOR_HXX_
 
 #include <string>
-#include <CORBA.h>
 #include "LocalTraceBufferPool.hxx"
 
 class LocalTraceCollector
 {
  public:
-  static LocalTraceCollector* instance(CORBA::ORB_ptr theOrb, int typeTrace=0);
+  static LocalTraceCollector* instance(int typeTrace=0);
   static void *run(void *bid);
   ~LocalTraceCollector();
 
@@ -48,7 +47,6 @@ class LocalTraceCollector
   static pthread_mutex_t _singletonMutex;
   static pthread_t _threadId;
   static std::string _fileName;
-  static CORBA::ORB_ptr _orb;
 };
 
 #endif
diff --git a/src/SALOMELocalTrace/LocalTrace_WaitForServerReadiness.cxx b/src/SALOMELocalTrace/LocalTrace_WaitForServerReadiness.cxx
deleted file mode 100644 (file)
index 75a0952..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-//  Copyright (C) 2004  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : LocalTrace_WaitForServerReadiness.cxx
-//  Author : Paul RASCLE (EDF)
-//  Module : KERNEL
-//  $Header$
-
-#include "LocalTrace_WaitForServerReadiness.hxx"
-#include <iostream>
-#include <ctime>
-
-using namespace std;
-
-// ============================================================================
-/*!
- *  Wait until a server is registered in naming service.
- *  \param serverName name of the server to find.
- *  When SALOME_NamingService is available,
- *  use NamingService_WaitForServerReadiness instead.
- *  This function is needed when macro MESSAGE used by SALOME_NamingService
- *  is not available (inside LocalTrace methods, for instance !).
- *  Direct access to CORBA Name Service. Look for serverName at Name service
- *  Root without extensions.
- */
-// ============================================================================
-
-CORBA::Object_ptr LocalTrace_WaitForServerReadiness(CORBA::ORB_ptr orb,
-                                                   string serverName)
-{
-  long TIMESleep = 250000000;
-  int NumberOfTries = 40;
-
-  timespec ts_req;
-  ts_req.tv_nsec=TIMESleep;
-  ts_req.tv_sec=0;
-  timespec ts_rem;
-  ts_rem.tv_nsec=0;
-  ts_rem.tv_sec=0;
-
-  CORBA::Object_var obj;
-
-  try
-    {
-      // NB. You can't use SALOME_NamingService class because
-      // it uses MESSAGE macro
-      // Otherwise, you will get segmentation fault.   
-
-      CosNaming::NamingContext_var inc;
-      CosNaming::Name name;
-      name.length(1);
-      name[0].id = CORBA::string_dup(serverName.c_str());
-      CORBA::Object_var theObj;
-
-      for (int itry=0; itry < NumberOfTries; itry++)
-       {
-         try
-           { 
-             if(!CORBA::is_nil(orb)) 
-               theObj = orb->resolve_initial_references("NameService");
-             if (!CORBA::is_nil(theObj))
-               inc = CosNaming::NamingContext::_narrow(theObj);
-           }  
-         catch( CORBA::COMM_FAILURE& )
-           {
-             cout << "LocalTrace_WaitForServerReadiness: "
-                  << "CORBA::COMM_FAILURE: "
-                  << "Unable to contact the Naming Service" << endl;
-           }
-          catch(...)
-           {
-             cout << "LocalTrace_WaitForServerReadiness: "
-                  << "Unknown exception dealing with Naming Service" << endl;
-           }
-         
-         if(!CORBA::is_nil(inc))
-           {
-             obj = inc->resolve(name);
-             if (!CORBA::is_nil(obj))
-               {
-                 cout << "LocalTrace_WaitForServerReadiness: "
-                      << serverName << " found in CORBA Name Service" << endl;
-                 break;
-               }
-           }
-         int a = nanosleep(&ts_req,&ts_rem);
-         cout << "LocalTrace_WaitForServerReadiness: retry look for"
-              << serverName << endl;
-       }          
-    }
-  catch (const CosNaming::NamingContext::NotFound&)
-    {
-      cout << "Caught exception: Naming Service can't found Logger";
-    }
-  catch (CORBA::COMM_FAILURE&)
-    {
-      cout << "Caught CORBA::SystemException CommFailure.";
-    }
-  catch (CORBA::SystemException&)
-    {
-      cout << "Caught CORBA::SystemException.";
-    }
-  catch (CORBA::Exception&)
-    {
-      cout << "Caught CORBA::Exception.";
-    }
-  catch (...)
-    {
-      cout << "Caught unknown exception.";
-    }
-  return obj._retn();
-}
-
diff --git a/src/SALOMELocalTrace/LocalTrace_WaitForServerReadiness.hxx b/src/SALOMELocalTrace/LocalTrace_WaitForServerReadiness.hxx
deleted file mode 100644 (file)
index a5e1c9a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-//  Copyright (C) 2004  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-//
-//
-//
-//  File   : LocalTrace_WaitForServerReadiness.hxx
-//  Author : Paul RASCLE (EDF)
-//  Module : KERNEL
-//  $Header$
-
-#ifndef _LOCALTRACE_WAITFORSERVERREADINESS_HXX_
-#define _LOCALTRACE_WAITFORSERVERREADINESS_HXX_
-
-#include <CORBA.h> 
-#include <string>
-
-CORBA::Object_ptr  LocalTrace_WaitForServerReadiness(CORBA::ORB_ptr theOrb,
-                                                    std::string serverName);
-
-#endif
index 5928c6409a25da56f2e84762c815565b6f1e37b3..8d2beb1d55106531213902af2129b8f1f5d5fa61 100644 (file)
@@ -37,8 +37,7 @@ VPATH=.:@srcdir@:@top_srcdir@/idl
 # header files  
 EXPORT_HEADERS= utilities.h \
                LocalTraceBufferPool.hxx \
-               LocalTraceCollector.hxx \
-               LocalTrace_WaitForServerReadiness.hxx
+               LocalTraceCollector.hxx
 
 EXPORT_PYSCRIPTS = 
 
@@ -46,10 +45,8 @@ EXPORT_PYSCRIPTS =
 
 LIB = libSALOMELocalTrace.la 
 LIB_SRC = LocalTraceCollector.cxx \
-         LocalTraceBufferPool.cxx \
-         LocalTrace_WaitForServerReadiness.cxx
+         LocalTraceBufferPool.cxx
 
-LIB_CLIENT_IDL = Logger.idl 
 LDFLAGS+= 
 
 @CONCLUDE@
diff --git a/src/SALOMETraceCollector/LocalTrace_WaitForServerReadiness.cxx b/src/SALOMETraceCollector/LocalTrace_WaitForServerReadiness.cxx
new file mode 100644 (file)
index 0000000..75a0952
--- /dev/null
@@ -0,0 +1,131 @@
+//  Copyright (C) 2004  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : LocalTrace_WaitForServerReadiness.cxx
+//  Author : Paul RASCLE (EDF)
+//  Module : KERNEL
+//  $Header$
+
+#include "LocalTrace_WaitForServerReadiness.hxx"
+#include <iostream>
+#include <ctime>
+
+using namespace std;
+
+// ============================================================================
+/*!
+ *  Wait until a server is registered in naming service.
+ *  \param serverName name of the server to find.
+ *  When SALOME_NamingService is available,
+ *  use NamingService_WaitForServerReadiness instead.
+ *  This function is needed when macro MESSAGE used by SALOME_NamingService
+ *  is not available (inside LocalTrace methods, for instance !).
+ *  Direct access to CORBA Name Service. Look for serverName at Name service
+ *  Root without extensions.
+ */
+// ============================================================================
+
+CORBA::Object_ptr LocalTrace_WaitForServerReadiness(CORBA::ORB_ptr orb,
+                                                   string serverName)
+{
+  long TIMESleep = 250000000;
+  int NumberOfTries = 40;
+
+  timespec ts_req;
+  ts_req.tv_nsec=TIMESleep;
+  ts_req.tv_sec=0;
+  timespec ts_rem;
+  ts_rem.tv_nsec=0;
+  ts_rem.tv_sec=0;
+
+  CORBA::Object_var obj;
+
+  try
+    {
+      // NB. You can't use SALOME_NamingService class because
+      // it uses MESSAGE macro
+      // Otherwise, you will get segmentation fault.   
+
+      CosNaming::NamingContext_var inc;
+      CosNaming::Name name;
+      name.length(1);
+      name[0].id = CORBA::string_dup(serverName.c_str());
+      CORBA::Object_var theObj;
+
+      for (int itry=0; itry < NumberOfTries; itry++)
+       {
+         try
+           { 
+             if(!CORBA::is_nil(orb)) 
+               theObj = orb->resolve_initial_references("NameService");
+             if (!CORBA::is_nil(theObj))
+               inc = CosNaming::NamingContext::_narrow(theObj);
+           }  
+         catch( CORBA::COMM_FAILURE& )
+           {
+             cout << "LocalTrace_WaitForServerReadiness: "
+                  << "CORBA::COMM_FAILURE: "
+                  << "Unable to contact the Naming Service" << endl;
+           }
+          catch(...)
+           {
+             cout << "LocalTrace_WaitForServerReadiness: "
+                  << "Unknown exception dealing with Naming Service" << endl;
+           }
+         
+         if(!CORBA::is_nil(inc))
+           {
+             obj = inc->resolve(name);
+             if (!CORBA::is_nil(obj))
+               {
+                 cout << "LocalTrace_WaitForServerReadiness: "
+                      << serverName << " found in CORBA Name Service" << endl;
+                 break;
+               }
+           }
+         int a = nanosleep(&ts_req,&ts_rem);
+         cout << "LocalTrace_WaitForServerReadiness: retry look for"
+              << serverName << endl;
+       }          
+    }
+  catch (const CosNaming::NamingContext::NotFound&)
+    {
+      cout << "Caught exception: Naming Service can't found Logger";
+    }
+  catch (CORBA::COMM_FAILURE&)
+    {
+      cout << "Caught CORBA::SystemException CommFailure.";
+    }
+  catch (CORBA::SystemException&)
+    {
+      cout << "Caught CORBA::SystemException.";
+    }
+  catch (CORBA::Exception&)
+    {
+      cout << "Caught CORBA::Exception.";
+    }
+  catch (...)
+    {
+      cout << "Caught unknown exception.";
+    }
+  return obj._retn();
+}
+
diff --git a/src/SALOMETraceCollector/LocalTrace_WaitForServerReadiness.hxx b/src/SALOMETraceCollector/LocalTrace_WaitForServerReadiness.hxx
new file mode 100644 (file)
index 0000000..a5e1c9a
--- /dev/null
@@ -0,0 +1,36 @@
+//  Copyright (C) 2004  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : LocalTrace_WaitForServerReadiness.hxx
+//  Author : Paul RASCLE (EDF)
+//  Module : KERNEL
+//  $Header$
+
+#ifndef _LOCALTRACE_WAITFORSERVERREADINESS_HXX_
+#define _LOCALTRACE_WAITFORSERVERREADINESS_HXX_
+
+#include <CORBA.h> 
+#include <string>
+
+CORBA::Object_ptr  LocalTrace_WaitForServerReadiness(CORBA::ORB_ptr theOrb,
+                                                    std::string serverName);
+
+#endif
diff --git a/src/SALOMETraceCollector/Makefile.in b/src/SALOMETraceCollector/Makefile.in
new file mode 100644 (file)
index 0000000..3948058
--- /dev/null
@@ -0,0 +1,52 @@
+#  SALOMELocalTrace : log on local machine
+#
+#  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+#
+#
+#
+#  File   : Makefile.in
+#  Author : Paul RASCLE (EDF)
+#  Module : SALOME
+#  $Header$
+
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@:@top_srcdir@/idl
+
+
+@COMMENCE@
+
+# header files  
+EXPORT_HEADERS= SALOMETraceCollector.hxx \
+               LocalTrace_WaitForServerReadiness.hxx
+
+EXPORT_PYSCRIPTS = 
+
+# Libraries targets
+
+LIB = libSALOMETraceCollector.la 
+LIB_SRC = SALOMETraceCollector.cxx \
+         LocalTrace_WaitForServerReadiness.cxx
+
+LIB_CLIENT_IDL = Logger.idl 
+LDFLAGS+= 
+
+@CONCLUDE@
diff --git a/src/SALOMETraceCollector/SALOMETraceCollector.cxx b/src/SALOMETraceCollector/SALOMETraceCollector.cxx
new file mode 100644 (file)
index 0000000..9336706
--- /dev/null
@@ -0,0 +1,279 @@
+//  Copyright (C) 2004  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : LocalTraceCollector.cxx
+//  Author : Paul RASCLE (EDF)
+//  Module : KERNEL
+//  $Header$
+
+#include <iostream>
+#include <sstream>
+#include <fstream>
+#include <cstdlib>
+#include <CORBA.h>
+
+using namespace std;
+
+#include "SALOMETraceCollector.hxx"
+#include "LocalTrace_WaitForServerReadiness.hxx"
+//#include "SALOME_Log.hxx"
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(Logger)
+
+// Class attributes initialisation, for class method SALOMETraceCollector::run
+
+SALOMETraceCollector* SALOMETraceCollector::_singleton = 0;
+pthread_mutex_t SALOMETraceCollector::_singletonMutex;
+int SALOMETraceCollector::_threadToClose = 0;
+pthread_t SALOMETraceCollector::_threadId = 0; // used to control single run
+int SALOMETraceCollector::_toFile = 0;
+std::string SALOMETraceCollector::_fileName = "";
+CORBA::ORB_ptr SALOMETraceCollector::_orb = 0;
+
+// ============================================================================
+/*!
+ *  guarantees a unique object instance of the class (singleton thread safe)
+ *  a separate thread for loop to print traces is launched.
+ *  \param typeTrace 0=standard out, 1=file(/tmp/tracetest.log), 2=CORBA log
+ *  If typeTrace=0, checks environment for "SALOME_trace". Test values in
+ *  the following order:
+ *  - "local"  standard out
+ *  - "with_logger" CORBA log
+ *  - anything else is kept as a file name
+ */
+// ============================================================================
+
+SALOMETraceCollector* SALOMETraceCollector::instance(CORBA::ORB_ptr theOrb,
+                                                  int typeTrace)
+{
+  if (_singleton == 0) // no need of lock when singleton already exists
+    {
+      int ret;
+      ret = pthread_mutex_lock(&_singletonMutex); // acquire lock to be alone
+      if (_singleton == 0)                     // another thread may have got
+       {                                      // the lock after the first test
+         _singleton = new SALOMETraceCollector();
+
+         _fileName = "/tmp/tracetest.log";
+         _toFile=0;
+         _orb = theOrb;
+         if (typeTrace)       // caller sets a value different from default=0
+           _toFile = typeTrace; 
+         else                 // check environment
+           {
+             char* traceKind = getenv("SALOME_trace");
+             //cout<<"SALOME_trace="<<traceKind<<endl;
+             if (traceKind)
+               {
+                 if (strcmp(traceKind,"local")==0) _toFile=0;
+                 else if (strcmp(traceKind,"with_logger")==0) _toFile=2;
+                 else
+                   {
+                     _toFile=1;
+                     _fileName = traceKind;
+                   }       
+               }
+           }
+         //cout <<"_toFile: "<<_toFile<<" _fileName: "<<_fileName<<endl;
+
+         pthread_t traceThread;
+         int bid;
+         int re2 = pthread_create(&traceThread, NULL,
+                                  SALOMETraceCollector::run, (void *)bid);
+       }
+      ret = pthread_mutex_unlock(&_singletonMutex); // release lock
+    }
+  return _singleton;
+}
+
+// ============================================================================
+/*!
+ *  In a separate thread, loop to print traces.
+ *  Mutex garantees intialisation 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.
+ *  Get a buffer. If type = ABORT then exit application with message.
+ */
+// ============================================================================
+
+void* SALOMETraceCollector::run(void *bid)
+{
+  int isOKtoRun = 0;
+  int ret = pthread_mutex_lock(&_singletonMutex); // acquire lock to be alone
+  if (! _threadId)  // only one run
+    {
+      isOKtoRun = 1;
+      _threadId = pthread_self();
+    }
+  else cout << "----- Comment est-ce possible de passer la ? -------" <<endl;
+  ret = pthread_mutex_unlock(&_singletonMutex); // release lock
+
+  if (isOKtoRun)
+    { 
+      _threadId = pthread_self();
+      LocalTraceBufferPool* myTraceBuffer = LocalTraceBufferPool::instance();
+      LocalTrace_TraceInfo myTrace;
+
+      // if trace in file requested, opens a file with append mode
+      // so, several processes can share the same file
+      // if CORBA collection requested, wait for Logger server readiness
+
+      ofstream traceFile;
+      SALOME_Logger::Logger_var m_pInterfaceLogger;
+      CORBA::Object_var obj;
+
+      switch (_toFile)
+       {
+       case 1 :  // --- trace to file
+         {
+           const char *fileName = _fileName.c_str();
+           traceFile.open(fileName, ios::out | ios::app);
+           if (!traceFile)
+             {
+               cerr << "impossible to open trace file "<< fileName << endl;
+               exit (1);
+             }
+         }
+         break;
+       case 2 :  // --- trace collection via CORBA
+         obj = LocalTrace_WaitForServerReadiness(_orb,"Logger");
+         if (!CORBA::is_nil(obj))
+           m_pInterfaceLogger = SALOME_Logger::Logger::_narrow(obj);
+         if (CORBA::is_nil(m_pInterfaceLogger))
+           {
+             cerr << "Logger server not found ! Abort" << endl;
+             cerr << flush ; 
+             exit(1);
+           } 
+         else
+           {
+             CORBA::String_var LogMsg =
+               CORBA::string_dup("\n---Init logger trace---\n");
+             m_pInterfaceLogger->putMessage(LogMsg);
+             //cout << " Logger server found" << endl;
+           }
+         break;
+       case 0 : ; // --- trace to standard output
+       default :  // --- on standard output, too
+         break;
+       }
+
+      // Loop until there is no more buffer to print,
+      // and no ask for end from destructor.
+
+      while ((!_threadToClose) || myTraceBuffer->toCollect() )
+       {
+         int fullBuf = myTraceBuffer->retrieve(myTrace);
+         if (myTrace.traceType == ABORT_MESS)
+           {
+             switch (_toFile)
+               {
+               case 2 :  // --- trace collection via CORBA
+                 {
+                   stringstream abortMessage("");
+                   abortMessage << "INTERRUPTION from thread "
+                                << myTrace.threadId << " : " << myTrace.trace;
+                   CORBA::String_var LogMsg =
+                     CORBA::string_dup(abortMessage.str().c_str());
+                   m_pInterfaceLogger->putMessage(LogMsg);
+                   exit(1);
+                 }
+                 break;
+               case 1 :  // --- trace to file
+                 traceFile << "INTERRUPTION from thread " << myTrace.threadId
+                           << " : " <<  myTrace.trace;
+                 traceFile.close();
+                 // no break here !
+               case 0 :  // --- trace to standard output
+               default : // --- on standard output, too
+                 cout << flush ;
+                 cerr << "INTERRUPTION from thread " << myTrace.threadId
+                      << " : " <<  myTrace.trace;
+                 cerr << flush ; 
+                 exit(1);     
+                 break;
+               }
+           }
+         else
+           {
+             switch (_toFile)
+               {
+               case 2 :  // --- trace collection via CORBA
+                 {
+                   stringstream aMessage("");
+                   aMessage << "th. " << myTrace.threadId
+                            << " " << myTrace.trace;
+                   CORBA::String_var LogMsg =
+                     CORBA::string_dup(aMessage.str().c_str());
+                   m_pInterfaceLogger->putMessage(LogMsg);
+                 }
+                 break;
+               case 1 :  // --- trace to file
+                 traceFile << "th. " << myTrace.threadId
+                           << " " << myTrace.trace;
+                 break;
+               case 0 :  // --- trace to standard output
+               default : // --- on standard output, too
+                 cout << "th. " << myTrace.threadId << " " << myTrace.trace;
+                 break;
+               }
+           }
+       }
+
+      if (_toFile==1) traceFile.close();
+    }
+  pthread_exit(NULL);
+}
+
+// ============================================================================
+/*!
+ *  Destructor: wait until printing thread ends (SALOMETraceCollector::run)
+ */
+// ============================================================================
+
+SALOMETraceCollector:: ~SALOMETraceCollector()
+{
+  LocalTraceBufferPool* myTraceBuffer = LocalTraceBufferPool::instance();
+  _threadToClose = 1;
+  myTraceBuffer->insert(NORMAL_MESS,"end of trace "); //needed to wake up thread
+  if (_threadId)
+    {
+      int ret = pthread_join(_threadId, NULL);
+      if (ret) cout << "error close SALOMETraceCollector : "<< ret << endl;
+      else cout << "SALOMETraceCollector destruction OK" << endl;
+    }
+  delete myTraceBuffer;
+}
+
+// ============================================================================
+/*!
+ * Constructor: no need of LocalTraceBufferPool object initialization here,
+ * thread safe singleton used in LocalTraceBufferPool::instance()
+ */
+// ============================================================================
+
+SALOMETraceCollector::SALOMETraceCollector()
+{
+  _threadId=0;
+}
+
+
diff --git a/src/SALOMETraceCollector/SALOMETraceCollector.hxx b/src/SALOMETraceCollector/SALOMETraceCollector.hxx
new file mode 100644 (file)
index 0000000..846c4ad
--- /dev/null
@@ -0,0 +1,54 @@
+//  Copyright (C) 2004  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+//
+//
+//
+//  File   : SALOMETraceCollector.hxx
+//  Author : Paul RASCLE (EDF)
+//  Module : KERNEL
+//  $Header$
+
+#ifndef _SALOMETRACECOLLECTOR_HXX_
+#define _SALOMETRACECOLLECTOR_HXX_
+
+#include <string>
+#include <CORBA.h>
+#include "LocalTraceBufferPool.hxx"
+
+class SALOMETraceCollector
+{
+ public:
+  static SALOMETraceCollector* instance(CORBA::ORB_ptr theOrb, int typeTrace=0);
+  static void *run(void *bid);
+  ~SALOMETraceCollector();
+
+ protected:
+  SALOMETraceCollector();
+
+ private:
+  static int _threadToClose;
+  static int _toFile;
+  static SALOMETraceCollector* _singleton;
+  static pthread_mutex_t _singletonMutex;
+  static pthread_t _threadId;
+  static std::string _fileName;
+  static CORBA::ORB_ptr _orb;
+};
+
+#endif
index 01c5872213ed99e30936b984278c4ad25d51c276..45ce4c82b7ea57224c6bb960a9cc70d5562af5f4 100644 (file)
@@ -53,7 +53,7 @@ BIN_CLIENT_IDL = SALOMEDS.idl SALOMEDS_Attributes.idl SALOME_Component.idl SALOM
 
 CPPFLAGS+=$(QT_MT_INCLUDES) $(OCC_INCLUDES) $(PYTHON_INCLUDES) $(HDF5_INCLUDES)
 CXXFLAGS+=$(OCC_CXXFLAGS)
-LDFLAGS+=$(QT_MT_LIBS) $(HDF5_LIBS) -lSalomeHDFPersist -lSalomeNS -lSalomeGUI -lSalomeObject -lSalomeLifeCycleCORBA -lqsplitterP -lOpUtil -lPlot2d -lSalomeVTKFilter -lSALOMELocalTrace -lSalomeContainer -lRegistry -lSalomeNotification -lSalomeDS -lTOOLSDS -lSalomeGenericObj -lSalomeCatalog -lEvent -lSalomePrs $(CAS_LDPATH) -lTKBO -lCASCatch
+LDFLAGS+=$(QT_MT_LIBS) $(HDF5_LIBS) -lSalomeHDFPersist -lSalomeNS -lSalomeGUI -lSalomeObject -lSalomeLifeCycleCORBA -lqsplitterP -lOpUtil -lPlot2d -lSalomeVTKFilter -lSALOMELocalTrace -lSALOMETraceCollector -lSalomeContainer -lRegistry -lSalomeNotification -lSalomeDS -lTOOLSDS -lSalomeGenericObj -lSalomeCatalog -lEvent -lSalomePrs $(CAS_LDPATH) -lTKBO -lCASCatch
 
 
 @CONCLUDE@
index 33d3440a3e61cb287b6fc9b6a485cee02256088b..17a9718598616bf14d34ba49484d8af36baffc53 100644 (file)
@@ -55,7 +55,7 @@
 #include CORBA_SERVER_HEADER(SALOMEDS)
 
 #include "utilities.h"
-#include "LocalTraceCollector.hxx"
+#include "SALOMETraceCollector.hxx"
 
 #include "SALOME_Session_i.hxx"
 
@@ -96,7 +96,7 @@ int main(int argc, char **argv)
   ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
   int orbArgc = 1;
   CORBA::ORB_var &orb = init( orbArgc , argv ) ;
-  LocalTraceCollector *myThreadTrace = LocalTraceCollector::instance(orb);
+  SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
   try
     {
       CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
index 8ee409d994cf8305a6dc254d3b9181a064bfbe48..b16797b1f79cb20a82f36d66f7c04801975c76c6 100644 (file)
@@ -45,7 +45,7 @@ LIB_CLIENT_IDL = SALOME_Component.idl SALOME_TestComponent.idl
 BIN = TestContainer TestLogger
 BIN_SRC = 
 
-LDFLAGS+= -lSalomeNotification -lSalomeNS -lSalomeContainer -lRegistry -lOpUtil -lSALOMELocalTrace
+LDFLAGS+= -lSalomeNotification -lSalomeNS -lSalomeContainer -lRegistry -lOpUtil -lSALOMELocalTrace -lSALOMETraceCollector
 
 
 @CONCLUDE@
index 7766bb46ec9eaa09f5848417c62d023c30eccec9..e8492fb6e94c77cfa2f00e17346f97a63bc5dcee 100644 (file)
@@ -39,7 +39,7 @@
 #include "Utils_SINGLETON.hxx"
 #include "Utils_SALOME_Exception.hxx"
 #include "Utils_CommException.hxx"
-#include "LocalTraceCollector.hxx"
+#include "SALOMETraceCollector.hxx"
 using namespace std;
 
 static ostream& operator<<(ostream& os, const CORBA::Exception& e)
@@ -66,7 +66,7 @@ int main (int argc, char * argv[])
   // Initializing omniORB
   ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
   CORBA::ORB_var &orb = init( argc , argv ) ;
-  LocalTraceCollector *myThreadTrace = LocalTraceCollector::instance(orb);
+  SALOMETraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
 
   try
     {