]> SALOME platform Git repositories - samples/component.git/commitdiff
Salome HOME
[Bug PAL7356] 2.1.0_beta1: dataflow execution is aborted. V2_2_0 V2_2_0b4
authorapo <apo@opencascade.com>
Tue, 15 Feb 2005 07:13:37 +0000 (07:13 +0000)
committerapo <apo@opencascade.com>
Tue, 15 Feb 2005 07:13:37 +0000 (07:13 +0000)
src/CalculatorComponent/CalculatorEngine.cxx
src/CalculatorComponent/Makefile.in

index 8cfe52ed3bad7bb6c6f6f6f77e372a0c1909ea8f..8855c4fa93a7786faf42fabd5cd68662f7fcab10 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "CalculatorEngine.hxx"
 #include "MEDMEM_Support_i.hxx"
+#include "SUPPORTClient.hxx"
 
 #include "MEDMEM_define.hxx"
 #include "MEDMEM_STRING.hxx"
@@ -100,8 +101,11 @@ CalculatorEngine::~CalculatorEngine()
 {
 }
 
+static omni_mutex aPutToStudyMutex;
 SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::PutToStudy(SALOME_MED::FIELDDOUBLE_ptr theField1,
                                                         long int theStudyId) {
+  omni_mutex_lock aLock(aPutToStudyMutex);
+
   CORBA::Object_var anObj = _NS->Resolve("/myStudyManager");
   SALOMEDS::StudyManager_var aManager  = SALOMEDS::StudyManager::_narrow(anObj);
 //   SALOMEDS::ListOfOpenStudies_var aList = aManager->GetOpenStudies();
@@ -149,9 +153,12 @@ SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::PutToStudy(SALOME_MED::FIELDDOUBLE
 //
 //=======================================================================================
 
+static omni_mutex anAddMutex;
 SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Add(SALOME_MED::FIELDDOUBLE_ptr FirstField,
                                                  SALOME_MED::FIELDDOUBLE_ptr SecondField)
 {
+  omni_mutex_lock aLock(anAddMutex);
+
   ostringstream tmp;
   bool          same_support = true;
   
@@ -284,14 +291,12 @@ SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Add(SALOME_MED::FIELDDOUBLE_ptr Fi
 
   MESSAGE("CalculatorEngine::Add Creation of the CORBA field");
 
-  // Corrected by APV - November 23, 2004
-  // FIELDDOUBLE_i * NewField = new FIELDDOUBLE_i(support1,fieldloc) ;
+  SUPPORT *support1Clt=new SUPPORTClient(support1);
+  fieldloc->setSupport(support1Clt);
   FIELDDOUBLE_i * NewField = new FIELDDOUBLE_i(fieldloc) ;
+  SALOME_MED::FIELDDOUBLE_ptr myFieldIOR = NewField->_this() ;
 
-  POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i> * myFieldTie = new POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i>(NewField) ;
-  SALOME_MED::FIELDDOUBLE_ptr myFieldIOR = myFieldTie->_this() ;
-
-  sleep(4);
+  //sleep(4);
 
   END_OF("CalculatorEngine::Add(SALOME_MED::FIELDDOUBLE_ptr FirstField,SALOME_MED::FIELDDOUBLE_ptr SecondField)");
 
@@ -305,11 +310,13 @@ SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Add(SALOME_MED::FIELDDOUBLE_ptr Fi
 //  Multiplication of a FieldNodeDouble by a double value (based on Med library)
 //===============================================================================
 
+static omni_mutex aMulMutex;
 SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Mul(SALOME_MED::FIELDDOUBLE_ptr OldField,
                                                  CORBA::Double x1)
 {
-  beginService("CalculatorEngine::Mul");
+  omni_mutex_lock aLock(aMulMutex);
 
+  beginService("CalculatorEngine::Mul");
   BEGIN_OF("CalculatorEngine::Mul(SALOME_MED::FIELDDOUBLE_ptr OldField,CORBA::Double x1)");
 
   SCRUTE(OldField);
@@ -376,14 +383,12 @@ SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Mul(SALOME_MED::FIELDDOUBLE_ptr Ol
 
   MESSAGE("CalculatorEngine::Mul Creation of the CORBA field");
 
-  // Corrected by APV - November 23, 2004
-  // FIELDDOUBLE_i * NewField = new FIELDDOUBLE_i(support,fieldloc) ;
+  SUPPORT *supportClt=new SUPPORTClient(support);
+  fieldloc->setSupport(supportClt);
   FIELDDOUBLE_i * NewField = new FIELDDOUBLE_i(fieldloc) ;
+  SALOME_MED::FIELDDOUBLE_ptr myFieldIOR = NewField->_this() ;
 
-  POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i> * myFieldTie = new POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i>(NewField) ;
-  SALOME_MED::FIELDDOUBLE_ptr myFieldIOR = myFieldTie->_this() ;
-
-  sleep(4);
+  //sleep(4);
 
   END_OF("CalculatorEngine::Mul(SALOME_MED::FIELDDOUBLE_ptr OldField,CORBA::Double x1)");
 
@@ -396,12 +401,13 @@ SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Mul(SALOME_MED::FIELDDOUBLE_ptr Ol
 //  Build a constant field of double based on first field support (Med library)
 //================================================================================
 
+static omni_mutex aConstantMutex;
 SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Constant(SALOME_MED::FIELDDOUBLE_ptr FirstField,
                                                       CORBA::Double x1)
 {
+  omni_mutex_lock aLock(aConstantMutex);
 
   beginService("CalculatorEngine::Const");
-
   BEGIN_OF("CalculatorEngine::Constant(SALOME_MED::FIELDDOUBLE_ptr FirstField,CORBA::Double x1)");
 
   // Name and description of field
@@ -439,8 +445,6 @@ SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Constant(SALOME_MED::FIELDDOUBLE_p
     len_value = FirstSupport -> getNumberOfElements(SALOME_MED::MED_ALL_ELEMENTS);
 
   // Values of new field
-  SALOME_MED::double_array * old_value = FirstField -> getValue(SALOME_MED::MED_FULL_INTERLACE);
-
   int totalLength = nb_comp*len_value;
   double * new_value = new double[totalLength];
 
@@ -469,14 +473,13 @@ SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Constant(SALOME_MED::FIELDDOUBLE_p
 
   MESSAGE("CalculatorEngine::Constant Creation of the CORBA field");
 
-  // Corrected by APV - November 23, 2004
-  // FIELDDOUBLE_i * NewField = new FIELDDOUBLE_i(FirstSupport,fieldloc) ;
+  SUPPORT *supportClt=new SUPPORTClient(FirstSupport);
+  fieldloc->setSupport(supportClt);
   FIELDDOUBLE_i * NewField = new FIELDDOUBLE_i(fieldloc) ;
 
-  POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i> * myFieldTie = new POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i>(NewField) ;
-  SALOME_MED::FIELDDOUBLE_ptr myFieldIOR = myFieldTie->_this() ;
+  SALOME_MED::FIELDDOUBLE_ptr myFieldIOR = NewField->_this() ;
   
-  sleep(4);
+  //sleep(4);
 
   endService("CalculatorEngine::Const");
   
@@ -490,8 +493,11 @@ SALOME_MED::FIELDDOUBLE_ptr CalculatorEngine::Constant(SALOME_MED::FIELDDOUBLE_p
 //  write a field in a MED file
 //================================================================================
 
+static omni_mutex aWriteMEDfileMutex;
 void CalculatorEngine::writeMEDfile(SALOME_MED::FIELDDOUBLE_ptr field, const char *filename)
 {
+  omni_mutex_lock aLock(aWriteMEDfileMutex);
+
   beginService("CalculatorEngine::writeMEDfile");
   MESSAGE("fichier d'impression du champ resultat:"<<filename);
 
@@ -697,3 +703,4 @@ extern "C"
   }
 }
 
+
index 04cc930cc491ac9d11a2421a742ad24d44057536..d09acb54947ba2ae0a559083bac21d0af58e119c 100755 (executable)
@@ -51,7 +51,7 @@ EXPORT_HEADERS =
 
 CPPFLAGS+= $(PYTHON_INCLUDES) $(HDF5_INCLUDES) $(MED2_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome -I${MED_ROOT_DIR}/include/salome
 CXXFLAGS= -g -D_DEBUG_ -D__x86__ -D__linux__ $(PYTHON_INCLUDES) -ftemplate-depth-42 -Wall -I${KERNEL_ROOT_DIR}/include/salome -I${MED_ROOT_DIR}/include/salome
-LDFLAGS+= -L${KERNEL_ROOT_DIR}/lib/salome -lSalomeContainer -lSalomeNS -lOpUtil -lRegistry -lSalomeNotification -lSALOMELocalTrace -L${MED_ROOT_DIR}/lib/salome -lMEDEngine
+LDFLAGS+= -L${KERNEL_ROOT_DIR}/lib/salome -lSalomeContainer -lSalomeNS -lOpUtil -lRegistry -lSalomeNotification -lSALOMELocalTrace -L${MED_ROOT_DIR}/lib/salome -lMEDEngine -lMEDClientcmodule
 
 
 MED.hh MEDSK.cc: ${MED_ROOT_DIR}/idl/salome/MED.idl