Salome HOME
updated copyright message
[modules/kernel.git] / src / MPIContainer / MPIContainer_i.cxx
index 19f6f8fe0902cb013d069529d03b44c2968f1678..b2f30116dce03f2283fcca8dfa1e378c35e7256a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  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
@@ -19,8 +19,6 @@
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-//  File   : MPIContainer_i.cxx
-//  Module : SALOME
 
 #include <iostream>
 #include <dlfcn.h>
@@ -48,7 +46,7 @@ Engines_MPIContainer_i::Engines_MPIContainer_i(CORBA::ORB_ptr orb,
                                                PortableServer::POA_ptr poa,
                                                char * containerName,
                                                int argc, char *argv[]) 
-  : Engines_Container_i(orb,poa,containerName,argc,argv,false)
+  : Engines_Container_i(orb,poa,containerName,argc,argv,nullptr,false)
 {
 
   _id = _poa->activate_object(this);
@@ -62,7 +60,7 @@ Engines_MPIContainer_i::Engines_MPIContainer_i(CORBA::ORB_ptr orb,
     _NS->init_orb( CORBA::ORB::_duplicate(_orb) ) ;
 
     std::string hostname = Kernel_Utils::GetHostname();
-    _containerName = _NS->BuildContainerNameForNS(containerName,hostname.c_str());
+    _containerName = SALOME_NamingService_Abstract::BuildContainerNameForNS(containerName,hostname.c_str());
     SCRUTE(_containerName);
     _NS->Register(pCont, _containerName.c_str());
 
@@ -121,7 +119,7 @@ bool Engines_MPIContainer_i::load_component_Library(const char* componentName, C
 {
   reason=CORBA::string_dup("");
 
-  pthread_t *th;
+  pthread_t *th = 0;
   if(_numproc == 0){
     th = new pthread_t[_nbproc];
     for(int ip=1;ip<_nbproc;ip++){
@@ -149,7 +147,11 @@ bool Engines_MPIContainer_i::Lload_component_Library(const char* componentName)
 
   // --- try dlopen C++ component
 
+#ifdef __APPLE__
+  std::string impl_name = std::string ("lib") + aCompName + std::string("Engine.dylib");
+#else
   std::string impl_name = std::string ("lib") + aCompName + std::string("Engine.so");
+#endif
   
   _numInstanceMutex.lock(); // lock to be alone 
   // (see decInstanceCnt, finalize_removal))
@@ -162,7 +164,7 @@ bool Engines_MPIContainer_i::Lload_component_Library(const char* componentName)
     }
   
   void* handle;
-  handle = dlopen( impl_name.c_str() , RTLD_LAZY ) ;
+  handle = dlopen( impl_name.c_str() , RTLD_LAZY | RTLD_GLOBAL ) ;
   if ( handle )
     {
       _library_map[impl_name] = handle;
@@ -198,7 +200,7 @@ bool Engines_MPIContainer_i::Lload_component_Library(const char* componentName)
       PyObject *result = PyObject_CallMethod(pyCont,
                                              (char*)"import_component",
                                              (char*)"s",componentName);
-      std::string ret= PyString_AsString(result);
+      std::string ret= PyUnicode_AsUTF8(result);
       SCRUTE(ret);
       Py_RELEASE_NEW_THREAD;
   
@@ -215,12 +217,12 @@ bool Engines_MPIContainer_i::Lload_component_Library(const char* componentName)
 // Create an instance of component
 Engines::EngineComponent_ptr
 Engines_MPIContainer_i::create_component_instance_env( const char* componentName,
-                                                       const Engines::FieldsDict& env,
+                                                       const Engines::FieldsDict& /*env*/,
                                                        CORBA::String_out reason)
 {
   reason=CORBA::string_dup("");
 
-  pthread_t *th;
+  pthread_t *th = 0;
   if(_numproc == 0){
     th = new pthread_t[_nbproc];
     for(int ip=1;ip<_nbproc;ip++){
@@ -272,7 +274,7 @@ Engines_MPIContainer_i::Lcreate_component_instance( const char* genericRegisterN
     PyObject *pyCont = PyDict_GetItemString(globals, "pyCont");
     PyObject *result = PyObject_CallMethod(pyCont,
                                            (char*)"create_component_instance",
-                                           (char*)"ssl",
+                                           (char*)"ss",
                                            aCompName.c_str(),
                                            instanceName.c_str());
     const char *ior;
@@ -295,7 +297,11 @@ Engines_MPIContainer_i::Lcreate_component_instance( const char* genericRegisterN
   
   //--- try C++
 
+#ifdef __APPLE__
+  std::string impl_name = std::string ("lib") + genericRegisterName +std::string("Engine.dylib");
+#else
   std::string impl_name = std::string ("lib") + genericRegisterName +std::string("Engine.so");
+#endif
   if (_library_map.count(impl_name) != 0) // C++ component
     {
       void* handle = _library_map[impl_name];
@@ -354,7 +360,7 @@ Engines_MPIContainer_i::createMPIInstance(std::string genericRegisterName,
       std::string component_registerName =
         _containerName + "/" + instanceName;
 
-      // --- Instanciate required CORBA object
+      // --- Instantiate required CORBA object
 
       PortableServer::ObjectId *id ; //not owner, do not delete (nore use var)
       id = (MPIComponent_factory) ( _orb, _poa, _id, instanceName.c_str(), aGenRegisterName.c_str() ) ;
@@ -390,7 +396,7 @@ Engines_MPIContainer_i::createMPIInstance(std::string genericRegisterName,
 Engines::EngineComponent_ptr Engines_MPIContainer_i::load_impl(const char* nameToRegister,
                                                  const char* componentName)
 {
-  pthread_t *th;
+  pthread_t *th = 0;
   if(_numproc == 0){
     th = new pthread_t[_nbproc];
     for(int ip=1;ip<_nbproc;ip++){
@@ -439,7 +445,7 @@ Engines::EngineComponent_ptr Engines_MPIContainer_i::Lload_impl(
 
   std::string absolute_impl_name(_impl_name);
   MESSAGE("[" << _numproc << "] absolute_impl_name=" << absolute_impl_name);
-  void * handle = dlopen(absolute_impl_name.c_str(), RTLD_LAZY);
+  void * handle = dlopen(absolute_impl_name.c_str(), RTLD_LAZY | RTLD_GLOBAL);
   if(!handle){
     INFOS("[" << _numproc << "] Can't load shared library : " << absolute_impl_name);
     INFOS("[" << _numproc << "] error dlopen: " << dlerror());
@@ -503,7 +509,7 @@ void Engines_MPIContainer_i::remove_impl(Engines::EngineComponent_ptr component_
   Engines::MPIObject_ptr pcptr;
   Engines::MPIObject_ptr spcptr;
 
-  pthread_t *th;
+  pthread_t *th = 0;
   if(_numproc == 0){
     pcptr = (Engines::MPIObject_ptr)component_i;
     th = new pthread_t[_nbproc];
@@ -537,7 +543,7 @@ void Engines_MPIContainer_i::remove_impl(Engines::EngineComponent_ptr component_
 
 void Engines_MPIContainer_i::finalize_removal()
 {
-  pthread_t *th;
+  pthread_t *th = 0;
   if(_numproc == 0){
     th = new pthread_t[_nbproc];
     for(int ip=1;ip<_nbproc;ip++){