]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
- Ajout d'une fonction pour la cohérence du numéro des instances de composants
authorribes <ribes>
Wed, 25 Mar 2009 11:00:22 +0000 (11:00 +0000)
committerribes <ribes>
Wed, 25 Mar 2009 11:00:22 +0000 (11:00 +0000)
dans le container parallèle

idl/SALOME_PACOExtension.idl
idl/SALOME_PACOExtension.xml
src/ParallelContainer/SALOME_ParallelContainerProxy_i.cxx
src/ParallelContainer/SALOME_ParallelContainer_i.cxx
src/ParallelContainer/SALOME_ParallelContainer_i.hxx

index eb7a5d0cda25425cacf7503c663ed74362c64d70..f75da0ccf12bdac910a45afe8261e97d0db96b94 100644 (file)
@@ -45,6 +45,8 @@ module Engines
     void create_paco_component_node_instance(in string registeredName,
                                             in string proxy_containerName,
                                             in long studyId) raises(SALOME::SALOME_Exception);
+
+    void updateInstanceNumber();
   };
 
 /*--------------------------------------------------------------------------------------------*/
index 2c7a0593a15d6d497e5e80c80b9592cf8af342a6..c642410b6f38e82889cf743acaa855a32e55e80f 100644 (file)
  </Interface>
  <Interface>
   <Name>PACO_Container</Name>
+   <Method>
+     <Name>updateInstanceNumber</Name>
+     <Type>distributed</Type>
+   </Method>
  </Interface>
  <Interface>
    <Name>Parallel_DSC</Name>
index 60c35a3a4d7774f355f9d84465bbc20610f4397d..f6eb80b37258c57aae8d47025b1575c43105a037 100644 (file)
@@ -275,9 +275,10 @@ Container_proxy_impl_final::create_component_instance(const char* componentName,
   // If it is a sequential component
   if (_libtype_map[aCompName] == "seq")
   {
-    _numInstanceMutex.lock() ; // lock on the instance number
-    _numInstance++ ;
-    _numInstanceMutex.unlock() ;
+    _numInstanceMutex.lock(); // lock on the instance number
+    _numInstance++;
+    _numInstanceMutex.unlock();
+    Engines::PACO_Container_proxy_impl::updateInstanceNumber();
     return Engines::Container_proxy_impl::create_component_instance(componentName, studyId);
   }
 
index 341e09a9eaee6aca1cdc6ecc39edd32f6b9c630b..65cea7871ebcdbc3b41827b1889d5df6d5f2f76a 100644 (file)
@@ -902,9 +902,10 @@ Engines_Parallel_Container_i::create_paco_component_node_instance(const char* co
   void* handle = _library_map[impl_name];
   _numInstanceMutex.lock() ; // lock on the instance number
   _numInstance++ ;
+  int numInstance = _numInstance ;
   _numInstanceMutex.unlock() ;
   char aNumI[12];
-  sprintf( aNumI , "%d" , _numInstance ) ;
+  sprintf( aNumI , "%d" , numInstance ) ;
   string instanceName = aCompName + "_inst_" + aNumI ;
 
   // Step 1 : Get proxy !
@@ -914,6 +915,7 @@ Engines_Parallel_Container_i::create_paco_component_node_instance(const char* co
   if (CORBA::is_nil(obj_proxy))
   {
     INFOS("Proxy reference from NamingService is nil !");
+    INFOS("Proxy name was : " << component_registerName);
     SALOME::ExceptionStruct es;
     es.type = SALOME::INTERNAL_ERROR;
     es.text = "Proxy reference from NamingService is nil !";
@@ -1019,6 +1021,22 @@ bool Engines_Parallel_Container_i::isPythonContainer(const char* ContainerName)
   return ret;
 }
 
+
+// Cette méthode permet de tenir à jour le compteur des
+// instances pour le container parallèle.
+// En effet losrque l'on charge un composant séquentielle seul
+// le compteur du noeud 0 est augmenté, il faut donc tenir les autres 
+// noeuds à jour.
+void
+Engines_Parallel_Container_i::updateInstanceNumber()
+{
+  if (getMyRank() != 0)
+  {
+    _numInstanceMutex.lock();
+    _numInstance++;
+    _numInstanceMutex.unlock();
+  }
+}
 //=============================================================================
 /*! 
  *  
index 877cc1e07c71cd516a4c59395bc806c1426a618a..a3a8083bf18317d6cfe21b205e6a647394e94cfd 100644 (file)
@@ -90,6 +90,8 @@ public:
                                      const char* proxy_containerName,
                                      CORBA::Long studyId); // 0 for multiStudy
 
+  void updateInstanceNumber();
+
   void remove_impl(Engines::Component_ptr component_i);
   void finalize_removal();