Salome HOME
updated copyright message
[modules/kernel.git] / src / Launcher / SALOME_LauncherServer.cxx
index c2a304ada278d11cd248a828e7f691e56c386775..b0b84adceb873c7e03c305d6fc00e40a7105998e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+#include "ArgvKeeper.hxx"
 #include "SALOME_Launcher.hxx"
 #include "SALOMESDS_DataServerManager.hxx"
 #include "SALOME_ExternalServerLauncher.hxx"
 #include "SALOME_CPythonHelper.hxx"
+#include "OpUtil.hxx"
 #include "utilities.h"
 #include <sstream>
 #include <iostream>
 #include <stdexcept>
+#include <string>
+#include <vector>
 #include <libxml/parser.h>
 
 void AttachDebugger();
@@ -67,7 +71,7 @@ int main(int argc, char* argv[])
     {
 //       setsig(SIGSEGV,&Handler);
       std::set_terminate(&terminateHandler);
-      std::set_unexpected(&unexpectedHandler);
+      //std::set_unexpected(&unexpectedHandler);
     }
   /* Init libxml 
    * To avoid memory leak, need to call xmlInitParser in the main thread
@@ -80,16 +84,13 @@ int main(int argc, char* argv[])
   CORBA::Object_var obj;
   CORBA::ORB_var orb;
   {
-    int myArgc(argc+2);
-    char **myArgv(new char *[myArgc]);
+    std::vector<std::string> args;
     for(int i=0;i<argc;i++)
-      myArgv[i]=strdup(argv[i]);
-    myArgv[argc+0]=strdup("-ORBsupportCurrent");
-    myArgv[argc+1]=strdup("0");
-    orb = CORBA::ORB_init( myArgc , myArgv ) ;
-    for(int i=0;i<myArgc;i++)
-      free(myArgv[i]);
-    delete [] myArgv;
+      args.push_back(argv[i]);
+    args.push_back("-ORBsupportCurrent");
+    args.push_back("0");
+    SetArgcArgv(args);
+    orb = KERNEL::GetRefToORB();
   }
   //  LocalTraceCollector *myThreadTrace = SALOMETraceCollector::instance(orb);
   INFOS_COMPILATION;
@@ -117,7 +118,9 @@ int main(int argc, char* argv[])
       threadPol->destroy();
       SALOME_CPythonHelper cPyh;
       cPyh.initializePython(argc,argv);
+      cPyh.allowPythonCallsFromDifferentThread();
       SALOME_Launcher *lServ(new SALOME_Launcher(orb,safePOA));
+      lServ->DeclareUsingSalomeSession();
       lServ->_remove_ref();
       //
       SALOMESDS::DataServerManager *dsm(new SALOMESDS::DataServerManager(&cPyh,orb,root_poa));