#include "Basics_Utils.hxx"
#include "Basics_DirUtils.hxx"
#include "PythonCppUtils.hxx"
+#include "KernelBasis.hxx"
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>
*/
//=============================================================================
-void SALOME_ContainerManager::ShutdownContainers()
+void SALOME_ContainerManager::ShutdownContainersGeneric(std::function<void(Engines::Container_ptr)> funcToBeCalledOnContainer)
{
- MESSAGE("ShutdownContainers");
+ MESSAGE("ShutdownContainersGeneric");
if(!_NS)
return ;
SALOME::Session_var session = SALOME::Session::_nil();
Engines::Container_var cont=Engines::Container::_narrow(obj);
if(!CORBA::is_nil(cont))
{
- MESSAGE("ShutdownContainers: " << (*iter));
- cont->Shutdown();
+ MESSAGE("ShutdownContainersGeneric: " << (*iter));
+ funcToBeCalledOnContainer( cont );
+ MESSAGE("ShutdownContainersGeneric: after call of shutdown" << (*iter));
}
else
- MESSAGE("ShutdownContainers: no container ref for " << (*iter));
+ MESSAGE("ShutdownContainersGeneric: no container ref for " << (*iter));
}
catch(CORBA::SystemException& e)
{
}
}
+void SALOME_ContainerManager::ShutdownContainers()
+{
+ this->ShutdownContainersGeneric( [](Engines::Container_ptr cont) { cont->Shutdown(); } );
+}
+
+void SALOME_ContainerManager::ShutdownContainersNow()
+{
+ this->ShutdownContainersGeneric( [](Engines::Container_ptr cont)
+ {
+ try
+ {
+ cont->ShutdownNow();
+ }
+ catch(...)
+ {
+ }
+ }
+ );
+}
+
void SALOME_ContainerManager::SetOverrideEnvForContainers(const Engines::KeyValDict& env)
{
this->_override_env.clear();
return ret;
}
+std::string SALOME_ContainerManager::GetCppBinaryOfKernelSSLContainer() const
+{
+ switch( SALOME::GetPyExecutionMode() )
+ {
+ case SALOME::PyExecutionMode::InProcess:
+ return "SALOME_Container_No_NS_Serv";
+ case SALOME::PyExecutionMode::OutOfProcessNoReplay:
+ return "SALOME_Container_No_NS_Serv_OutProcess";
+ case SALOME::PyExecutionMode::OutOfProcessWithReplay:
+ return "SALOME_Container_No_NS_Serv_OutProcess_Replay";
+ default:
+ {
+ ERROR_MESSAGE("Not manager py execution mode");
+ THROW_SALOME_EXCEPTION("GetCppBinaryOfKernelSSLContainer : Not manager py execution mode");
+ }
+ }
+}
+
std::string SALOME_ContainerManager::GetCppBinaryOfKernelContainer() const
{
- std::string ret = this->_isSSL ? "SALOME_Container_No_NS_Serv" : "SALOME_Container";
+ std::string ret = this->_isSSL ? GetCppBinaryOfKernelSSLContainer() : "SALOME_Container";
return ret;
}
// manage GIL
PyObject* mod(PyImport_ImportModule(theScriptName.c_str()));
+ MESSAGE("Template name :"<< theScriptName.c_str());
+
if (!mod)
{
- PyObject* sys = PyImport_ImportModule("sys");
- PyObject* sys_path = PyObject_GetAttrString(sys, "path");
- PyObject* folder_path = PyUnicode_FromString(getScriptTemplateFilePath().c_str());
+ AutoPyRef sys = PyImport_ImportModule("sys");
+ AutoPyRef sys_path = PyObject_GetAttrString(sys, "path");
+ AutoPyRef folder_path = PyUnicode_FromString(getScriptTemplateFilePath().c_str());
PyList_Append(sys_path, folder_path);
mod = PyImport_ImportModule(theScriptName.c_str());
- Py_XDECREF(folder_path);
- Py_XDECREF(sys_path);
- Py_XDECREF(sys);
}
if (mod)
Py_XDECREF(mod);
}
}
+ else
+ {
+ ERROR_MESSAGE("Can not import the template script \"" << theScriptName << "\" !");
+ }
MESSAGE("Command from template is ... " << command << std::endl);
return command;
std::string ompi_uri_file = GetenvThreadSafeAsString("OMPI_URI_FILE");
script_parameters.push(ompi_uri_file.empty() ? "NULL" : ompi_uri_file);
+ MESSAGE("Retrieving command from template (python module) \"" << script_name << "\"" << std::endl);
std::string command_from_template = GetCommandFromTemplate(script_name, script_parameters);
std::ostringstream o;