Version: 9.15.0
YACS::ENGINE::SalomeContainerMultiHelper Class Reference

#include <SalomeContainerHelper.hxx>

Inheritance diagram for YACS::ENGINE::SalomeContainerMultiHelper:
Collaboration diagram for YACS::ENGINE::SalomeContainerMultiHelper:

Public Member Functions

std::string getType () const
 
std::string getDftLaunchMode () const
 
SalomeContainerMultiHelperdeepCpyOnlyStaticInfo () const
 
Engines::Container_var getContainer (const Task *askingNode) const
 
bool isAlreadyStarted (const Task *askingNode) const
 
void setContainer (const Task *askingNode, Engines::Container_var cont)
 
void shutdown ()
 
- Public Member Functions inherited from YACS::ENGINE::RefCounter
unsigned int getRefCnt () const
 
void incrRef () const
 
bool decrRef () const
 

Static Public Attributes

static const char TYPE_NAME [] ="multi"
 
static const char DFT_LAUNCH_MODE [] ="getorstart"
 
- Static Public Attributes inherited from YACS::ENGINE::RefCounter
static unsigned int _totalCnt =0
 

Private Member Functions

 ~SalomeContainerMultiHelper ()
 

Private Attributes

std::map< const ComponentInstance *, Engines::Container_var > _containersForComponents
 
std::map< const Task *, Engines::Container_var > _containersForTasks
 
std::mutex _data_mutex
 

Additional Inherited Members

- Protected Member Functions inherited from YACS::ENGINE::SalomeContainerHelper
virtual ~SalomeContainerHelper ()
 
- Protected Member Functions inherited from YACS::ENGINE::RefCounter
 RefCounter ()
 
 RefCounter (const RefCounter &other)
 
virtual ~RefCounter ()
 
- Protected Attributes inherited from YACS::ENGINE::RefCounter
unsigned int _cnt
 

Detailed Description

Definition at line 77 of file SalomeContainerHelper.hxx.

Constructor & Destructor Documentation

◆ ~SalomeContainerMultiHelper()

SalomeContainerMultiHelper::~SalomeContainerMultiHelper ( )
private

Definition at line 239 of file SalomeContainerHelper.cxx.

240 {
241 }

Member Function Documentation

◆ deepCpyOnlyStaticInfo()

SalomeContainerMultiHelper * SalomeContainerMultiHelper::deepCpyOnlyStaticInfo ( ) const
virtual

◆ getContainer()

Engines::Container_var SalomeContainerMultiHelper::getContainer ( const Task askingNode) const
virtual

Implements YACS::ENGINE::SalomeContainerHelper.

Definition at line 135 of file SalomeContainerHelper.cxx.

136 {
137  std::unique_lock<std::mutex> lock(_data_mutex);
138  const ComponentInstance *inst(askingNode?askingNode->getComponent():0);
139  if(inst == nullptr && askingNode != nullptr && askingNode->hasImposedResource())
140  {
141  std::map<const Task *,Engines::Container_var>::const_iterator it(_containersForTasks.find(askingNode));
142  if(it!=_containersForTasks.end())
143  return (*it).second;
144  else
145  return Engines::Container::_nil();
146  }
147  else
148  {
149  std::map<const ComponentInstance *,Engines::Container_var>::const_iterator it(_containersForComponents.find(inst));
150  if(it!=_containersForComponents.end())
151  return (*it).second;
152  else
153  return Engines::Container::_nil();
154  }
155 }
Base class for all component instances.
std::map< const ComponentInstance *, Engines::Container_var > _containersForComponents
std::map< const Task *, Engines::Container_var > _containersForTasks
virtual ComponentInstance * getComponent()=0
virtual bool hasImposedResource() const
Definition: Task.hxx:58

References _containersForComponents, _containersForTasks, _data_mutex, YACS::ENGINE::Task::getComponent(), and YACS::ENGINE::Task::hasImposedResource().

◆ getDftLaunchMode()

std::string SalomeContainerMultiHelper::getDftLaunchMode ( ) const
virtual

Implements YACS::ENGINE::SalomeContainerHelper.

Definition at line 125 of file SalomeContainerHelper.cxx.

126 {
127  return std::string(DFT_LAUNCH_MODE);
128 }

References DFT_LAUNCH_MODE.

◆ getType()

std::string SalomeContainerMultiHelper::getType ( ) const
virtual

Implements YACS::ENGINE::SalomeContainerHelper.

Definition at line 120 of file SalomeContainerHelper.cxx.

121 {
122  return TYPE_NAME;
123 }

References TYPE_NAME.

◆ isAlreadyStarted()

bool SalomeContainerMultiHelper::isAlreadyStarted ( const Task askingNode) const
virtual

Implements YACS::ENGINE::SalomeContainerHelper.

Definition at line 157 of file SalomeContainerHelper.cxx.

158 {
159  std::unique_lock<std::mutex> lock(_data_mutex);
160  const ComponentInstance *inst(askingNode?askingNode->getComponent():0);
161  if(inst == nullptr && askingNode != nullptr && askingNode->hasImposedResource())
162  {
163  return _containersForTasks.count(askingNode) > 0;
164  }
165  else
166  {
167  if(_containersForComponents.count(inst)==0)
168  return false;
169  else
170  return true;
171  }
172 }

References _containersForComponents, _containersForTasks, _data_mutex, YACS::ENGINE::Task::getComponent(), and YACS::ENGINE::Task::hasImposedResource().

◆ setContainer()

void SalomeContainerMultiHelper::setContainer ( const Task askingNode,
Engines::Container_var  cont 
)
virtual

Implements YACS::ENGINE::SalomeContainerHelper.

Definition at line 174 of file SalomeContainerHelper.cxx.

175 {
176  std::unique_lock<std::mutex> lock(_data_mutex);
177  const ComponentInstance *inst(askingNode?askingNode->getComponent():0);
178  if(inst == nullptr && askingNode != nullptr && askingNode->hasImposedResource())
179  {
180  _containersForTasks[askingNode] = cont;
181  }
182  else
183  {
184  _containersForComponents[inst]=cont;
185 #ifdef REFCNT
186  std::map<const ComponentInstance *, Engines::Container_var >::const_iterator it;
187  for(it = _containersForComponents.begin(); it != _containersForComponents.end(); ++it)
188  {
189  DEBTRACE(it->second->_PR_getobj()->pd_refCount );
190  }
191 #endif
192  }
193 }
#define DEBTRACE(msg)
Definition: YacsTrace.hxx:31

References _containersForComponents, _containersForTasks, _data_mutex, DEBTRACE, YACS::ENGINE::Task::getComponent(), and YACS::ENGINE::Task::hasImposedResource().

◆ shutdown()

void SalomeContainerMultiHelper::shutdown ( )
virtual

Implements YACS::ENGINE::SalomeContainerHelper.

Definition at line 195 of file SalomeContainerHelper.cxx.

196 {
197  std::unique_lock<std::mutex> lock(_data_mutex);
198  for(std::map<const Task *, Engines::Container_var >::const_iterator it = _containersForTasks.begin();
199  it != _containersForTasks.end(); ++it)
200  {
201  try
202  {
203  CORBA::String_var containerName=it->second->name();
204  INFO_MESSAGE("shutdown SALOME container: " << containerName);
205  it->second->Shutdown();
206  }
207  catch(CORBA::Exception&)
208  {
209  ERROR_MESSAGE("Unexpected CORBA failure detected." );
210  }
211  catch(...)
212  {
213  ERROR_MESSAGE("Unknown exception ignored." );
214  }
215  }
216  _containersForTasks.clear();
217 
218  for(std::map<const ComponentInstance *, Engines::Container_var >::const_iterator it = _containersForComponents.begin(); it != _containersForComponents.end(); ++it)
219  {
220  try
221  {
222  CORBA::String_var containerName=it->second->name();
223  INFO_MESSAGE("shutdown SALOME container: " << containerName);
224  it->second->Shutdown();
225  std::cerr << "shutdown SALOME container: " << containerName << std::endl;
226  }
227  catch(CORBA::Exception&)
228  {
229  ERROR_MESSAGE("Unexpected CORBA failure detected." );
230  }
231  catch(...)
232  {
233  ERROR_MESSAGE("Unknown exception ignored." );
234  }
235  }
236  _containersForComponents.clear();
237 }

References _containersForComponents, _containersForTasks, and _data_mutex.

Member Data Documentation

◆ _containersForComponents

std::map<const ComponentInstance *,Engines::Container_var> YACS::ENGINE::SalomeContainerMultiHelper::_containersForComponents
private

Definition at line 93 of file SalomeContainerHelper.hxx.

Referenced by getContainer(), isAlreadyStarted(), setContainer(), and shutdown().

◆ _containersForTasks

std::map<const Task *,Engines::Container_var> YACS::ENGINE::SalomeContainerMultiHelper::_containersForTasks
private

Definition at line 94 of file SalomeContainerHelper.hxx.

Referenced by getContainer(), isAlreadyStarted(), setContainer(), and shutdown().

◆ _data_mutex

std::mutex YACS::ENGINE::SalomeContainerMultiHelper::_data_mutex
mutableprivate

Definition at line 95 of file SalomeContainerHelper.hxx.

Referenced by getContainer(), isAlreadyStarted(), setContainer(), and shutdown().

◆ DFT_LAUNCH_MODE

const char SalomeContainerMultiHelper::DFT_LAUNCH_MODE ="getorstart"
static

Definition at line 91 of file SalomeContainerHelper.hxx.

Referenced by getDftLaunchMode().

◆ TYPE_NAME

const char SalomeContainerMultiHelper::TYPE_NAME ="multi"
static

The documentation for this class was generated from the following files: