Salome HOME
[EDF29150] : Make the trace messages clearer and more efficient.
[modules/kernel.git] / src / ParallelContainer / SALOME_ParallelContainerProxy_i.cxx
index c3ef5afcf452ef82fe514e9afa65ad45c9969df4..f2cd9e701f6caf80cfcf64d59c8de90e157e391a 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
@@ -57,10 +57,11 @@ Container_proxy_impl_final::Container_proxy_impl_final(CORBA::ORB_ptr orb,
   myCommand += _containerName + "','";
   myCommand += sior;
   myCommand += "')\n";
-  Py_ACQUIRE_NEW_THREAD;
-  PyRun_SimpleString("import SALOME_Container\n");
-  PyRun_SimpleString((char*)myCommand.c_str());
-  Py_RELEASE_NEW_THREAD;
+  {
+    AutoGIL agil;
+    PyRun_SimpleString("import SALOME_Container\n");
+    PyRun_SimpleString((char*)myCommand.c_str());
+  }
 }
 
 Container_proxy_impl_final:: ~Container_proxy_impl_final() {
@@ -209,16 +210,17 @@ Container_proxy_impl_final::load_component_Library(const char* componentName, CO
 #endif
 
       MESSAGE("Try to import Python component "<<componentName);
-      Py_ACQUIRE_NEW_THREAD;
-      PyObject *mainmod = PyImport_AddModule("__main__");
-      PyObject *globals = PyModule_GetDict(mainmod);
-      PyObject *pyCont = PyDict_GetItemString(globals, "pyCont");
-      PyObject *result = PyObject_CallMethod(pyCont,
-                                             (char*)"import_component",
-                                             (char*)"s",componentName);
-      std::string ret_p= PyString_AsString(result);
-      Py_XDECREF(result);
-      Py_RELEASE_NEW_THREAD;
+      {
+        AutoGIL agil;
+        PyObject *mainmod = PyImport_AddModule("__main__");
+        PyObject *globals = PyModule_GetDict(mainmod);
+        PyObject *pyCont = PyDict_GetItemString(globals, "pyCont");
+        PyObject *result = PyObject_CallMethod(pyCont,
+                                              (char*)"import_component",
+                                              (char*)"s",componentName);
+        std::string ret_p= PyUnicode_AsUTF8(result);
+        Py_XDECREF(result);
+      }
 
       if (ret_p=="") // import possible: Python component
       {
@@ -275,11 +277,11 @@ Container_proxy_impl_final::load_component_Library(const char* componentName, CO
 }
 
 Engines::EngineComponent_ptr 
-Container_proxy_impl_final::create_component_instance(const char* componentName, ::CORBA::Long studyId)
+Container_proxy_impl_final::create_component_instance(const char* componentName)
 {
   Engines::FieldsDict_var env = new Engines::FieldsDict;
   char* reason;
-  Engines::EngineComponent_ptr compo = create_component_instance_env(componentName, studyId, env, reason);
+  Engines::EngineComponent_ptr compo = create_component_instance_env(componentName, env, reason);
   CORBA::string_free(reason);
   return compo;
 }
@@ -289,7 +291,7 @@ Container_proxy_impl_final::create_component_instance(const char* componentName,
 // Composant parallèle -> création du proxy ici puis appel de la création de chaque objet participant
 // au composant parallèle
 Engines::EngineComponent_ptr 
-Container_proxy_impl_final::create_component_instance_env(const char* componentName, ::CORBA::Long studyId,
+Container_proxy_impl_final::create_component_instance_env(const char* componentName,
                                                           const Engines::FieldsDict& env, CORBA::String_out reason)
 {
   reason=CORBA::string_dup("");
@@ -309,7 +311,7 @@ Container_proxy_impl_final::create_component_instance_env(const char* componentN
     _numInstance++;
     _numInstanceMutex.unlock();
     Engines::PACO_Container_proxy_impl::updateInstanceNumber();
-    return Engines::Container_proxy_impl::create_component_instance(componentName, studyId);
+    return Engines::Container_proxy_impl::create_component_instance(componentName);
   }
 
   // Parallel Component !
@@ -361,7 +363,7 @@ Container_proxy_impl_final::create_component_instance_env(const char* componentN
                                                  instanceName.c_str(), 
                                                  _parallel_object_topology.total);
 
-    // --- get reference & servant from id
+    // --- get reference from id
     CORBA::Object_var obj = _poa->id_to_reference(*(proxy->proxy_id));
     component_proxy = Engines::EngineComponent::_narrow(obj);
     proxy->proxy_corba_ref = component_proxy;
@@ -400,7 +402,7 @@ Container_proxy_impl_final::create_component_instance_env(const char* componentN
     {
       try 
       {
-        node->create_paco_component_node_instance(componentName, _containerName.c_str(), studyId);
+        node->create_paco_component_node_instance(componentName, _containerName.c_str());
         MESSAGE("Call create_paco_component_node_instance done on node : " << i);
       }
       catch (SALOME::SALOME_Exception & ex)