+ catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable
+ {
+ // ignore and continue
+ }
+
+//Wait some time so that ModulCatalog be completely shutdown
+#ifndef WIN32
+ nanosleep(&ts_req,0);
+#endif
+ // 4 ) Remote ScopeServer (the DataServer is hosted by SalomeLauncher shutdown right after on point 6)
+ try
+ {
+ CORBA::Object_var objDSM(_NS->Resolve(SALOMESDS::DataServerManager::NAME_IN_NS));
+ SALOME::DataServerManager_var dsm(SALOME::DataServerManager::_narrow(objDSM));
+ if ( !CORBA::is_nil(dsm) )
+ dsm->shutdownScopes();
+ }
+ catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable
+ {
+ // ignore and continue
+ }
+ // 5) External server launcher (the ExternalServer is hosted by SalomeLauncher shutdown right after on point 6)
+ try
+ {
+ CORBA::Object_var objDSM(_NS->Resolve(SALOME_ExternalServerLauncher::NAME_IN_NS));
+ SALOME::ExternalServerLauncher_var dsm(SALOME::ExternalServerLauncher::_narrow(objDSM));
+ if ( !CORBA::is_nil(dsm) )
+ dsm->shutdownServers();
+ }
+ catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable
+ {
+ // ignore and continue
+ }
+ // 6) SalomeLauncher
+ try
+ {
+ if(shutdownLauncher){
+ CORBA::Object_var objSL = _NS->Resolve("/SalomeLauncher");
+ Engines::SalomeLauncher_var launcher = Engines::SalomeLauncher::_narrow(objSL);
+ if (!CORBA::is_nil(launcher) && (pid != launcher->getPID()))
+ launcher->Shutdown();
+ }
+ }
+ catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable
+ {
+ // ignore and continue
+ }
+
+//Wait some time so that launcher be completely shutdown
+#ifndef WIN32
+ nanosleep(&ts_req,0);
+#endif
+
+ // 6) Registry
+ try
+ {
+ CORBA::Object_var objR = _NS->Resolve("/Registry");
+ Registry::Components_var registry = Registry::Components::_narrow(objR);
+ if ( !CORBA::is_nil(registry) && ( pid != registry->getPID() ) )
+ registry->Shutdown();
+ _NS->Destroy_Name("/Registry");
+ }
+ catch(const CORBA::Exception& /*e*/) //!< TODO: unused variable
+ {
+ // ignore and continue
+ }
+
+ // 7) Logger
+ int argc = 0;
+ char *xargv = (char*)"";
+ char **argv = &xargv;
+ CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
+
+ CORBA::Object_var objLog = CORBA::Object::_nil();
+ CosNaming::NamingContext_var inc;
+ CORBA::Object_var theObj = CORBA::Object::_nil();
+ std::string stdname = "Logger";
+ CosNaming::Name name;
+ name.length(1);
+ name[0].id = CORBA::string_dup(stdname.c_str());
+ try
+ {
+ if(!CORBA::is_nil(orb))
+ theObj = orb->resolve_initial_references("NameService");
+ if (!CORBA::is_nil(theObj))
+ inc = CosNaming::NamingContext::_narrow(theObj);
+ }
+ catch(...)
+ {
+ }
+ if(!CORBA::is_nil(inc))
+ {
+ try
+ {
+ objLog = inc->resolve(name);
+ SALOME_Logger::Logger_var logger = SALOME_Logger::Logger::_narrow(objLog);
+ if ( !CORBA::is_nil(logger) )
+ logger->shutdown();
+ }
+ catch(...)
+ {
+ }
+ }
+}
+
+//=============================================================================
+/*! \brief shutdown omniNames
+ */
+//=============================================================================
+
+void SALOME_LifeCycleCORBA::killOmniNames()
+{
+ std::string portNumber (::getenv ("NSPORT") );
+ std::string python_exe;
+
+ python_exe = std::string("python3");
+
+ if ( !portNumber.empty() )
+ {
+ std::string cmd;
+
+ cmd = std::string("from salome_utils import killOmniNames; ");
+ cmd += std::string("killOmniNames(") + portNumber + "); ";
+ cmd = python_exe + std::string(" -c \"") + cmd +"\"";
+ MESSAGE(cmd);
+ system( cmd.c_str() );
+
+ cmd = std::string("from killSalomeWithPort import cleanApplication; ");
+ cmd += std::string("cleanApplication(") + portNumber + "); ";
+ cmd = python_exe + std::string(" -c \"") + cmd +"\"";
+ MESSAGE(cmd);
+ system( cmd.c_str() );
+ }
+
+ // shutdown portmanager
+ if ( !portNumber.empty() )
+ {
+ std::string cmd;
+
+ cmd = std::string("from PortManager import releasePort; ");
+ cmd += std::string("releasePort(") + portNumber + "); ";
+ cmd = python_exe + std::string(" -c \"") + cmd +"\"";
+ MESSAGE(cmd);
+ system( cmd.c_str() );
+ }