From 1797820314f19fcaca1a7191839b4dc92be5260b Mon Sep 17 00:00:00 2001 From: Anthony Geay Date: Tue, 5 Aug 2014 18:26:51 +0200 Subject: [PATCH] The DistributedPythonNode with func is OK with HPContainer. --- src/engine/Container.cxx | 2 +- src/engine/Container.hxx | 10 ++-- src/engine/ServerNode.cxx | 23 ++------- src/engine/ServerNode.hxx | 4 -- src/runtime/CMakeLists.txt | 2 + src/runtime/DistributedPythonNode.cxx | 19 ++++++- src/runtime/SalomeContainer.cxx | 4 +- src/runtime/SalomeContainer.hxx | 2 +- src/runtime/SalomeContainerTmpForHP.cxx | 66 +++++++++++++++++++++++++ src/runtime/SalomeContainerTmpForHP.hxx | 49 ++++++++++++++++++ src/runtime/SalomeContainerTools.cxx | 6 +-- src/runtime/SalomeContainerTools.hxx | 2 +- src/runtime/SalomeHPComponent.cxx | 62 ++--------------------- src/runtime/SalomeHPContainer.cxx | 12 ++++- src/runtime/SalomeHPContainer.hxx | 2 + src/runtime/SalomeHPContainerTools.cxx | 14 ++++++ src/runtime/SalomeHPContainerTools.hxx | 3 ++ 17 files changed, 185 insertions(+), 97 deletions(-) create mode 100644 src/runtime/SalomeContainerTmpForHP.cxx create mode 100644 src/runtime/SalomeContainerTmpForHP.hxx diff --git a/src/engine/Container.cxx b/src/engine/Container.cxx index 2bd052dd5..bac46ee42 100644 --- a/src/engine/Container.cxx +++ b/src/engine/Container.cxx @@ -36,7 +36,7 @@ Container::~Container() { } -std::string Container::getDiscreminantStrOfThis() const +std::string Container::getDiscreminantStrOfThis(const Task *askingNode) const { const void *ptr(this); std::ostringstream oss; oss << ptr; diff --git a/src/engine/Container.hxx b/src/engine/Container.hxx index 979485aeb..1d74f63de 100644 --- a/src/engine/Container.hxx +++ b/src/engine/Container.hxx @@ -47,7 +47,7 @@ namespace YACS #endif public: //Execution only methods - virtual std::string getDiscreminantStrOfThis() const; + virtual std::string getDiscreminantStrOfThis(const Task *askingNode) const; virtual bool isAlreadyStarted(const Task *askingNode) const = 0; virtual void start(const Task *askingNode) throw(Exception) = 0; virtual std::string getPlacementId(const Task *askingNode) const = 0; @@ -70,11 +70,11 @@ namespace YACS virtual std::map getProperties() const = 0; virtual std::map getResourceProperties(const std::string& name) const = 0; virtual void setProperties(const std::map& properties); - std::string getName() const { return _name; }; + std::string getName() const { return _name; } //! \b WARNING ! name is used in edition to identify different containers, it is not the runtime name of the container - void setName(std::string name) { _name = name; }; - void setProc(Proc* proc) { _proc = proc; }; - Proc* getProc() { return _proc; }; + void setName(std::string name) { _name = name; } + void setProc(Proc* proc) { _proc = proc; } + Proc* getProc() { return _proc; } virtual void shutdown(int level) = 0; protected: std::string _name; diff --git a/src/engine/ServerNode.cxx b/src/engine/ServerNode.cxx index 453ca04c5..203651de4 100644 --- a/src/engine/ServerNode.cxx +++ b/src/engine/ServerNode.cxx @@ -23,11 +23,11 @@ using namespace YACS::ENGINE; -ServerNode::ServerNode(const std::string& name):InlineFuncNode(name),_container(0) +ServerNode::ServerNode(const std::string& name):InlineFuncNode(name) { } -ServerNode::ServerNode(const ServerNode& other, ComposedNode *father):InlineFuncNode(other,father),_container(0) +ServerNode::ServerNode(const ServerNode& other, ComposedNode *father):InlineFuncNode(other,father) { } @@ -43,11 +43,11 @@ void ServerNode::load() { if(_container) { - if(!_container->isAlreadyStarted(0)) + if(!_container->isAlreadyStarted(this)) { try { - _container->start(0); + _container->start(this); } catch(Exception& e) { @@ -70,18 +70,6 @@ void ServerNode::accept(Visitor *visitor) visitor->visitServerNode(this); } -void ServerNode::setContainer(Container *container) -{ - if(_container==container) - return ; - if(_container) - _container->decrRef(); - _container=container; - if(_container) - _container->incrRef(); - modified(); -} - //! By definition of ServerNode class. bool ServerNode::isDeployable() const { @@ -90,6 +78,5 @@ bool ServerNode::isDeployable() const ServerNode::~ServerNode() { - if(_container) - _container->decrRef(); } + diff --git a/src/engine/ServerNode.hxx b/src/engine/ServerNode.hxx index 2c33a24da..cf6eed064 100644 --- a/src/engine/ServerNode.hxx +++ b/src/engine/ServerNode.hxx @@ -41,14 +41,10 @@ namespace YACS void load(); void accept(Visitor *visitor); virtual ServerNode *createNode(const std::string& name) const = 0; - Container *getContainer() const { return _container; } - void setContainer(Container *container); bool isDeployable() const; virtual std::string getEffectiveKindOfServer() const = 0; virtual ~ServerNode(); virtual std::string typeName() { return "YACS__ENGINE__ServerNode"; } - protected: - Container *_container; }; } } diff --git a/src/runtime/CMakeLists.txt b/src/runtime/CMakeLists.txt index 42ae3fbd8..e7eee373b 100644 --- a/src/runtime/CMakeLists.txt +++ b/src/runtime/CMakeLists.txt @@ -120,6 +120,7 @@ SET(YACSRuntimeSALOME_HEADERS SalomeContainer.hxx SalomeContainerTools.hxx SalomeContainerHelper.hxx + SalomeContainerTmpForHP.hxx SalomeHPContainer.hxx SalomeHPContainerTools.hxx SALOMEDispatcher.hxx @@ -176,6 +177,7 @@ SET(YACSRuntimeSALOME_SOURCES SalomeHPContainer.cxx SalomeHPContainerTools.cxx SalomeContainerHelper.cxx + SalomeContainerTmpForHP.cxx PythonPorts.cxx XMLNode.cxx XMLPorts.cxx diff --git a/src/runtime/DistributedPythonNode.cxx b/src/runtime/DistributedPythonNode.cxx index cb65eb186..70f9785c2 100644 --- a/src/runtime/DistributedPythonNode.cxx +++ b/src/runtime/DistributedPythonNode.cxx @@ -21,6 +21,8 @@ #include "RuntimeSALOME.hxx" #include "SalomeContainer.hxx" #include "PythonNode.hxx" +#include "SalomeHPContainer.hxx" +#include "SalomeContainerTmpForHP.hxx" #include "PythonPorts.hxx" #include "YacsTrace.hxx" @@ -117,7 +119,22 @@ void DistributedPythonNode::execute() { YACSTRACE(1,"+++++++++++++++++ DistributedPythonNode::execute: " << getName() << " " << getFname() << " +++++++++++++++++" ); { - Engines::Container_var objContainer=((SalomeContainer*)_container)->getContainerPtr(this); + Engines::Container_var objContainer=Engines::Container::_nil(); + if(!_container) + throw Exception("No container specified !"); + SalomeContainer *containerCast0(dynamic_cast(_container)); + SalomeHPContainer *containerCast1(dynamic_cast(_container)); + if(containerCast0) + objContainer=containerCast0->getContainerPtr(this); + else if(containerCast1) + { + YACS::BASES::AutoCppPtr tmpCont(SalomeContainerTmpForHP::BuildFrom(containerCast1,this)); + objContainer=tmpCont->getContainerPtr(this); + } + else + throw Exception("Unrecognized type of container ! Salome one is expected !"); + if(CORBA::is_nil(objContainer)) + throw Exception("Container corba pointer is NULL !"); Engines::PyNode_var pn=objContainer->createPyNode(getName().c_str(),getScript().c_str()); ////// int pos=0; diff --git a/src/runtime/SalomeContainer.cxx b/src/runtime/SalomeContainer.cxx index 849e7e5af..1f1287409 100644 --- a/src/runtime/SalomeContainer.cxx +++ b/src/runtime/SalomeContainer.cxx @@ -64,9 +64,9 @@ SalomeContainer::SalomeContainer(const SalomeContainer& other) { } -SalomeContainer::SalomeContainer(const Container& other, const SalomeContainerTools& sct, SalomeContainerHelper *lmt, +SalomeContainer::SalomeContainer(const Container& other, const SalomeContainerTools& sct, const SalomeContainerHelper *lmt, const std::vector& componentNames, int shutdownLev):Container(other),_componentNames(componentNames), - _launchModeType(lmt),_shutdownLevel(shutdownLev),_sct(sct) + _launchModeType(const_cast(lmt)),_shutdownLevel(shutdownLev),_sct(sct) { if(lmt) lmt->incrRef(); diff --git a/src/runtime/SalomeContainer.hxx b/src/runtime/SalomeContainer.hxx index 2d07b7819..4910dcb51 100644 --- a/src/runtime/SalomeContainer.hxx +++ b/src/runtime/SalomeContainer.hxx @@ -42,7 +42,7 @@ namespace YACS SalomeContainer(); SalomeContainer(const SalomeContainer& other); #ifndef SWIG - SalomeContainer(const Container& other, const SalomeContainerTools& sct, SalomeContainerHelper *lmt, const std::vector& componentNames, int shutdownLev); + SalomeContainer(const Container& other, const SalomeContainerTools& sct, const SalomeContainerHelper *lmt, const std::vector& componentNames, int shutdownLev); #endif //! For thread safety for concurrent load operation on same Container. void lock(); diff --git a/src/runtime/SalomeContainerTmpForHP.cxx b/src/runtime/SalomeContainerTmpForHP.cxx new file mode 100644 index 000000000..d3a7334f6 --- /dev/null +++ b/src/runtime/SalomeContainerTmpForHP.cxx @@ -0,0 +1,66 @@ +// Copyright (C) 2006-2014 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "SalomeContainerTmpForHP.hxx" +#include "ComponentInstance.hxx" +#include "SalomeHPContainer.hxx" +#include "AutoLocker.hxx" +#include "Task.hxx" + +using namespace YACS::ENGINE; + +CORBA::Object_ptr SalomeContainerTmpForHP::loadComponent(Task *askingNode) +{ + const ComponentInstance *inst(askingNode?askingNode->getComponent():0); + if(!inst) + throw Exception("SalomeContainerTmpForHP::loadComponent : asking to load a component on the given task whereas this task has no component !"); + std::string compoName(inst->getCompoName()); + { + YACS::BASES::AutoLocker alck(this);//To be sure + if(!this->isAlreadyStarted(askingNode)) + this->start(askingNode); + } + CORBA::Object_ptr objComponent=CORBA::Object::_nil(); + { + YACS::BASES::AutoLocker alck(this);//To be sure + std::string compoName(inst->getCompoName()); + Engines::Container_var container(_launchModeType->getContainer(askingNode)); + objComponent=container->find_component_instance(compoName.c_str(),0); + if(CORBA::is_nil(objComponent)) + { + char *reason; + bool isLoadable(container->load_component_Library(compoName.c_str(), reason)); + if(isLoadable) + objComponent=SalomeContainerTools::CreateComponentInstance(this,container,inst); + } + } + return objComponent; +} + +SalomeContainerTmpForHP *SalomeContainerTmpForHP::BuildFrom(const SalomeHPContainer *cont, const Task *askingNode) +{ + const SalomeContainerHelper *lmt(0); + std::size_t posIn(0); + { + YACS::BASES::AutoLocker altck(const_cast(cont)); + lmt=cont->getHelperOfTask(askingNode); + posIn=cont->locateTask(askingNode); + } + return new SalomeContainerTmpForHP(*cont,cont->getContainerInfo(),lmt,cont->getComponentNames(),cont->getShutdownLev(),cont,posIn); +} diff --git a/src/runtime/SalomeContainerTmpForHP.hxx b/src/runtime/SalomeContainerTmpForHP.hxx new file mode 100644 index 000000000..8f92dbe34 --- /dev/null +++ b/src/runtime/SalomeContainerTmpForHP.hxx @@ -0,0 +1,49 @@ +// Copyright (C) 2006-2014 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef __SALOMECONTAINERTMPFORHP_HXX__ +#define __SALOMECONTAINERTMPFORHP_HXX__ + +#include "YACSRuntimeSALOMEExport.hxx" +#include "SalomeContainer.hxx" + +#include + +namespace YACS +{ + namespace ENGINE + { + class SalomeHPContainer; + class SalomeContainerTmpForHP : public SalomeContainer + { + public: + SalomeContainerTmpForHP(const Container& other, const SalomeContainerTools& sct, const SalomeContainerHelper *lmt, + const std::vector& componentNames, int shutdownLev, + const SalomeHPContainer *zeOriginCont, std::size_t pos):SalomeContainer(other,sct,lmt,componentNames,shutdownLev),_zeOriginCont(zeOriginCont),_pos(pos) { } + std::string getDiscreminantStrOfThis(const Task *askingNode) const { std::ostringstream oss; oss << _zeOriginCont << "_" << _pos; return oss.str(); } + CORBA::Object_ptr loadComponent(Task *inst); + static SalomeContainerTmpForHP *BuildFrom(const SalomeHPContainer *cont, const Task *askingNode); + private: + const SalomeHPContainer *_zeOriginCont; + std::size_t _pos; + }; + } +} + +#endif diff --git a/src/runtime/SalomeContainerTools.cxx b/src/runtime/SalomeContainerTools.cxx index 5c20ba5f0..1a8ed7856 100644 --- a/src/runtime/SalomeContainerTools.cxx +++ b/src/runtime/SalomeContainerTools.cxx @@ -230,7 +230,7 @@ void SalomeContainerTools::setContainerName(const std::string& name) SetContainerNameOf(_params,name); } -std::string SalomeContainerTools::getNotNullContainerName(const Container *contPtr, bool& isEmpty) const +std::string SalomeContainerTools::getNotNullContainerName(const Container *contPtr, const Task *askingNode, bool& isEmpty) const { isEmpty=true; std::string name(_params.container_name); @@ -247,7 +247,7 @@ std::string SalomeContainerTools::getNotNullContainerName(const Container *contP stream << "_"; stream << contPtr->getName(); stream << "_"; - stream << contPtr->getDiscreminantStrOfThis(); + stream << contPtr->getDiscreminantStrOfThis(askingNode); return stream.str(); } } @@ -322,7 +322,7 @@ void SalomeContainerTools::Start(const std::vector& compoNames, Sal Engines::ContainerManager_var contManager(Engines::ContainerManager::_narrow(obj)); bool isEmptyName; - std::string str(sct.getNotNullContainerName(cont,isEmptyName)); + std::string str(sct.getNotNullContainerName(cont,askingNode,isEmptyName)); DEBTRACE("SalomeContainer::start " << str <<";"<< _sct.getHostName() <<";"<<_type); // Finalize parameters with components found in the container diff --git a/src/runtime/SalomeContainerTools.hxx b/src/runtime/SalomeContainerTools.hxx index 00b24ed85..1df904496 100644 --- a/src/runtime/SalomeContainerTools.hxx +++ b/src/runtime/SalomeContainerTools.hxx @@ -52,7 +52,7 @@ namespace YACS public: std::string getContainerName() const; void setContainerName(const std::string& name); - std::string getNotNullContainerName(const Container *contPtr, bool& isEmpty) const; + std::string getNotNullContainerName(const Container *contPtr, const Task *askingNode, bool& isEmpty) const; std::string getHostName() const; Engines::ContainerParameters getParameters() const { return _params; } static void SetContainerNameOf(Engines::ContainerParameters& params, const std::string& name); diff --git a/src/runtime/SalomeHPComponent.cxx b/src/runtime/SalomeHPComponent.cxx index 1976a88da..46ab56150 100644 --- a/src/runtime/SalomeHPComponent.cxx +++ b/src/runtime/SalomeHPComponent.cxx @@ -22,8 +22,8 @@ #include "SalomeContainer.hxx" #include "SalomeHPContainer.hxx" #include "SalomeComponent.hxx" // for KIND +#include "SalomeContainerTmpForHP.hxx" #include "CORBANode.hxx" -#include "AutoLocker.hxx" #ifdef SALOME_KERNEL #include "SALOME_NamingService.hxx" @@ -37,59 +37,11 @@ //#define _DEVDEBUG_ #include "YacsTrace.hxx" - -namespace YACS -{ - namespace ENGINE - { - class SalomeContainerTmpForHP : public SalomeContainer - { - public: - SalomeContainerTmpForHP(const Container& other, const SalomeContainerTools& sct, SalomeContainerHelper *lmt, - const std::vector& componentNames, int shutdownLev, - const SalomeHPContainer *zeOriginCont, std::size_t pos):SalomeContainer(other,sct,lmt,componentNames,shutdownLev),_zeOriginCont(zeOriginCont),_pos(pos) { } - std::string getDiscreminantStrOfThis() const { std::ostringstream oss; oss << _zeOriginCont << "_" << _pos; return oss.str(); } - CORBA::Object_ptr loadComponent(Task *inst); - private: - const SalomeHPContainer *_zeOriginCont; - std::size_t _pos; - }; - } -} - using namespace YACS::ENGINE; using namespace std; const char SalomeHPComponent::KIND[]="HPSalome"; -CORBA::Object_ptr SalomeContainerTmpForHP::loadComponent(Task *askingNode) -{ - const ComponentInstance *inst(askingNode?askingNode->getComponent():0); - if(!inst) - throw Exception("SalomeContainerTmpForHP::loadComponent : asking to load a component on the given task whereas this task has no component !"); - std::string compoName(inst->getCompoName()); - { - YACS::BASES::AutoLocker alck(this);//To be sure - if(!this->isAlreadyStarted(askingNode)) - this->start(askingNode); - } - CORBA::Object_ptr objComponent=CORBA::Object::_nil(); - { - YACS::BASES::AutoLocker alck(this);//To be sure - std::string compoName(inst->getCompoName()); - Engines::Container_var container(_launchModeType->getContainer(askingNode)); - objComponent=container->find_component_instance(compoName.c_str(),0); - if(CORBA::is_nil(objComponent)) - { - char *reason; - bool isLoadable(container->load_component_Library(compoName.c_str(), reason)); - if(isLoadable) - objComponent=SalomeContainerTools::CreateComponentInstance(this,container,inst); - } - } - return objComponent; -} - SalomeHPComponent::SalomeHPComponent(const std::string& name): ComponentInstance(name) { _objComponent=CORBA::Object::_nil(); @@ -136,16 +88,8 @@ void SalomeHPComponent::load(Task *askingNode) SalomeHPContainer *salomeContainer(dynamic_cast(_container)); if(salomeContainer) { - SalomeContainerHelper *lmt(0); - std::size_t posIn(0); - { - YACS::BASES::AutoLocker altck(salomeContainer); - lmt=salomeContainer->getHelperOfTask(askingNode); - posIn=salomeContainer->locateTask(askingNode); - } - SalomeContainerTmpForHP tmpCont(*salomeContainer,salomeContainer->getContainerInfo(),lmt, - salomeContainer->getComponentNames(),salomeContainer->getShutdownLev(),salomeContainer,posIn); - _objComponent=tmpCont.loadComponent(askingNode); + YACS::BASES::AutoCppPtr tmpCont(SalomeContainerTmpForHP::BuildFrom(salomeContainer,askingNode)); + _objComponent=tmpCont->loadComponent(askingNode); return ; } throw Exception("Unrecognized type of Container ! Only Salome and HPSalome container are supported by the Salome components !"); diff --git a/src/runtime/SalomeHPContainer.cxx b/src/runtime/SalomeHPContainer.cxx index 82c3d5dcc..1add756cd 100644 --- a/src/runtime/SalomeHPContainer.cxx +++ b/src/runtime/SalomeHPContainer.cxx @@ -19,6 +19,8 @@ #include "SalomeHPContainer.hxx" #include "SalomeHPComponent.hxx" +#include "SalomeContainerTmpForHP.hxx" +#include "AutoLocker.hxx" #include @@ -68,15 +70,21 @@ void SalomeHPContainer::unLock() _mutex.unLock(); } +std::string SalomeHPContainer::getDiscreminantStrOfThis(const Task *askingNode) const +{ + YACS::BASES::AutoCppPtr tmpCont(SalomeContainerTmpForHP::BuildFrom(this,askingNode)); + return tmpCont->getDiscreminantStrOfThis(askingNode); +} + bool SalomeHPContainer::isAlreadyStarted(const Task *askingNode) const { - const SalomeContainerMonoHelper *helper(_launchModeType.getHelperOfTask(askingNode)); + const SalomeContainerMonoHelper *helper(_launchModeType.getHelperOfTaskThreadSafe(this,askingNode)); return helper->isAlreadyStarted(askingNode); } void SalomeHPContainer::start(const Task *askingNode) throw(Exception) { - SalomeContainerMonoHelper *helper(_launchModeType.getHelperOfTask(askingNode)); + SalomeContainerMonoHelper *helper(_launchModeType.getHelperOfTaskThreadSafe(this,askingNode)); SalomeContainerTools::Start(_componentNames,helper,_sct,_shutdownLevel,this,askingNode); } diff --git a/src/runtime/SalomeHPContainer.hxx b/src/runtime/SalomeHPContainer.hxx index 0e0ab738c..879dff414 100644 --- a/src/runtime/SalomeHPContainer.hxx +++ b/src/runtime/SalomeHPContainer.hxx @@ -55,6 +55,7 @@ namespace YACS //! For thread safety for concurrent load operation on same Container. void unLock(); // + std::string getDiscreminantStrOfThis(const Task *askingNode) const; bool isAlreadyStarted(const Task *askingNode) const; void start(const Task *askingNode) throw(Exception); void shutdown(int level); @@ -76,6 +77,7 @@ namespace YACS std::vector getComponentNames() const { return _componentNames; } int getShutdownLev() const { return _shutdownLevel; } SalomeContainerMonoHelper *getHelperOfTask(const Task *node) { return _launchModeType.getHelperOfTask(node); } + const SalomeContainerMonoHelper *getHelperOfTask(const Task *node) const { return _launchModeType.getHelperOfTask(node); } // YACS::BASES::Mutex& getLocker() { return _mutex; } #endif diff --git a/src/runtime/SalomeHPContainerTools.cxx b/src/runtime/SalomeHPContainerTools.cxx index 57a7afdec..d9bdda068 100644 --- a/src/runtime/SalomeHPContainerTools.cxx +++ b/src/runtime/SalomeHPContainerTools.cxx @@ -18,6 +18,8 @@ // #include "SalomeHPContainerTools.hxx" +#include "SalomeHPContainer.hxx" +#include "AutoLocker.hxx" #include "Exception.hxx" #include @@ -79,11 +81,23 @@ std::size_t SalomeHPContainerVectOfHelper::locateTask(const Task *node) const return ret; } +const SalomeContainerMonoHelper *SalomeHPContainerVectOfHelper::getHelperOfTaskThreadSafe(const SalomeHPContainer *cont, const Task *node) const +{ + YACS::BASES::AutoLocker alck(const_cast(cont)); + return _launchModeType[locateTask(node)]; +} + const SalomeContainerMonoHelper *SalomeHPContainerVectOfHelper::getHelperOfTask(const Task *node) const { return _launchModeType[locateTask(node)]; } +SalomeContainerMonoHelper *SalomeHPContainerVectOfHelper::getHelperOfTaskThreadSafe(SalomeHPContainer *cont, const Task *node) +{ + YACS::BASES::AutoLocker alck(cont); + return _launchModeType[locateTask(node)]; +} + SalomeContainerMonoHelper *SalomeHPContainerVectOfHelper::getHelperOfTask(const Task *node) { return _launchModeType[locateTask(node)]; diff --git a/src/runtime/SalomeHPContainerTools.hxx b/src/runtime/SalomeHPContainerTools.hxx index c02b4267f..34a40af4b 100644 --- a/src/runtime/SalomeHPContainerTools.hxx +++ b/src/runtime/SalomeHPContainerTools.hxx @@ -34,6 +34,7 @@ namespace YACS { class Task; class SalomeComponent; + class SalomeHPContainer; class SalomeContainerMonoHelper; class SalomeHPContainerVectOfHelper { @@ -46,7 +47,9 @@ namespace YACS std::size_t locateTask(const Task *node) const; const SalomeContainerMonoHelper *at(std::size_t pos) const { checkPosInVec(pos); return _launchModeType[pos]; } SalomeContainerMonoHelper *at(std::size_t pos) { checkPosInVec(pos); return _launchModeType[pos]; } + const SalomeContainerMonoHelper *getHelperOfTaskThreadSafe(const SalomeHPContainer *cont, const Task *node) const; const SalomeContainerMonoHelper *getHelperOfTask(const Task *node) const; + SalomeContainerMonoHelper *getHelperOfTaskThreadSafe(SalomeHPContainer *cont, const Task *node); SalomeContainerMonoHelper *getHelperOfTask(const Task *node); private: void checkNoCurrentWork() const; -- 2.30.2