-// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#ifndef WIN32
#define LIB "lib"
+#ifdef __APPLE__
+#define ENGINESO "Engine.dylib"
+#else
#define ENGINESO "Engine.so"
+#endif
#else
#define LIB ""
#define ENGINESO "Engine.dll"
delete _id;
if(_NS)
delete _NS;
- if(!CORBA::is_nil(_dftPyNode))
- _dftPyNode->UnRegister();
- if(!CORBA::is_nil(_dftPyScriptNode))
- _dftPyScriptNode->UnRegister();
+ for(std::map<std::string,Engines::PyNode_var>::iterator it=_dftPyNode.begin();it!=_dftPyNode.end();it++)
+ {
+ Engines::PyNode_var tmpVar((*it).second);
+ if(!CORBA::is_nil(tmpVar))
+ tmpVar->UnRegister();
+ }
+ for(std::map<std::string,Engines::PyScriptNode_var>::iterator it=_dftPyScriptNode.begin();it!=_dftPyScriptNode.end();it++)
+ {
+ Engines::PyScriptNode_var tmpVar((*it).second);
+ if(!CORBA::is_nil(tmpVar))
+ tmpVar->UnRegister();
+ }
}
//=============================================================================
#ifndef WIN32
void* handle;
- handle = dlopen( impl_name.c_str() , RTLD_NOW ) ;
+ handle = dlopen( impl_name.c_str() , RTLD_NOW | RTLD_GLOBAL ) ;
if ( !handle )
{
//not loadable. Try to find the lib file in LD_LIBRARY_PATH
std::string path;
+#ifdef __APPLE__
+ char* p=getenv("DYLD_LIBRARY_PATH");
+#else
char* p=getenv("LD_LIBRARY_PATH");
+#endif
if(p)path=p;
path=path+SEP+"/usr/lib"+SEP+"/lib";
const char *error;
PyArg_ParseTuple(result,"ss", &ior, &error);
reason = CORBA::string_dup(error);
+ char * _ior = CORBA::string_dup(ior);
Py_DECREF(result);
PyGILState_Release(gstate);
- return CORBA::string_dup(ior);
+ return _ior;
}
if ( !Component_factory )
{
- INFOS( "Can't resolve symbol: " + factory_name );
+ MESSAGE( "Can't resolve symbol: " + factory_name );
#ifndef WIN32
reason=dlerror();
- INFOS(reason);
+ MESSAGE(reason);
#endif
return Engines::EngineComponent::_nil() ;
}
while (toFollow)
{
ctr++;
- SCRUTE(ctr);
+ //SCRUTE(ctr);
aBlock = fileTransfer->getBlock(fileId);
toFollow = aBlock->length();
- SCRUTE(toFollow);
+ //SCRUTE(toFollow);
CORBA::Octet *buf = aBlock->get_buffer();
fwrite(buf, sizeof(CORBA::Octet), toFollow, fp);
delete aBlock;
std::string astr=PyString_AsString(result);
Py_DECREF(res);
PyGILState_Release(gstate);
-
if(ierr==0)
{
- CORBA::Object_var obj = _orb->string_to_object(astr.c_str());
- node = Engines::PyNode::_narrow(obj);
- if(!CORBA::is_nil(_dftPyNode))
- _dftPyNode->UnRegister();
- _dftPyNode = node;
- if(!CORBA::is_nil(_dftPyNode))
- _dftPyNode->Register();
+ Utils_Locker lck(&_mutexForDftPy);
+ CORBA::Object_var obj=_orb->string_to_object(astr.c_str());
+ node=Engines::PyNode::_narrow(obj);
+ std::map<std::string,Engines::PyNode_var>::iterator it(_dftPyNode.find(nodeName));
+ if(it==_dftPyNode.end())
+ {
+ _dftPyNode[nodeName]=node;
+ }
+ else
+ {
+ Engines::PyNode_var oldNode((*it).second);
+ if(!CORBA::is_nil(oldNode))
+ oldNode->UnRegister();
+ (*it).second=node;
+ }
+ if(!CORBA::is_nil(node))
+ node->Register();
return node._retn();
}
else
es.text = astr.c_str();
throw SALOME::SALOME_Exception(es);
}
-
}
//=============================================================================
*
*/
//=============================================================================
-Engines::PyNode_ptr Engines_Container_i::getDefaultPyNode()
+Engines::PyNode_ptr Engines_Container_i::getDefaultPyNode(const char *nodeName)
{
- if(!CORBA::is_nil(_dftPyNode))
- return Engines::PyNode::_duplicate(_dftPyNode);
- else
+ Utils_Locker lck(&_mutexForDftPy);
+ std::map<std::string,Engines::PyNode_var>::iterator it(_dftPyNode.find(nodeName));
+ if(it==_dftPyNode.end())
return Engines::PyNode::_nil();
+ else
+ {
+ Engines::PyNode_var tmpVar((*it).second);
+ if(!CORBA::is_nil(tmpVar))
+ return Engines::PyNode::_duplicate(tmpVar);
+ else
+ return Engines::PyNode::_nil();
+ }
}
//=============================================================================
if(ierr==0)
{
- CORBA::Object_var obj = _orb->string_to_object(astr.c_str());
- node = Engines::PyScriptNode::_narrow(obj);
- if(!CORBA::is_nil(_dftPyScriptNode))
- _dftPyScriptNode->UnRegister();
- _dftPyScriptNode = node;
- if(!CORBA::is_nil(_dftPyScriptNode))
- _dftPyScriptNode->Register();
+ Utils_Locker lck(&_mutexForDftPy);
+ CORBA::Object_var obj=_orb->string_to_object(astr.c_str());
+ node=Engines::PyScriptNode::_narrow(obj);
+ std::map<std::string,Engines::PyScriptNode_var>::iterator it(_dftPyScriptNode.find(nodeName));
+ if(it==_dftPyScriptNode.end())
+ {
+ _dftPyScriptNode[nodeName]=node;
+ }
+ else
+ {
+ Engines::PyScriptNode_var oldNode((*it).second);
+ if(!CORBA::is_nil(oldNode))
+ oldNode->UnRegister();
+ (*it).second=node;
+ }
+ if(!CORBA::is_nil(node))
+ node->Register();
return node._retn();
}
else
*
*/
//=============================================================================
-Engines::PyScriptNode_ptr Engines_Container_i::getDefaultPyScriptNode()
+Engines::PyScriptNode_ptr Engines_Container_i::getDefaultPyScriptNode(const char *nodeName)
{
- if(!CORBA::is_nil(_dftPyScriptNode))
- return Engines::PyScriptNode::_duplicate(_dftPyScriptNode);
- else
+ Utils_Locker lck(&_mutexForDftPy);
+ std::map<std::string,Engines::PyScriptNode_var>::iterator it(_dftPyScriptNode.find(nodeName));
+ if(it==_dftPyScriptNode.end())
return Engines::PyScriptNode::_nil();
+ else
+ {
+ Engines::PyScriptNode_var tmpVar((*it).second);
+ if(!CORBA::is_nil(tmpVar))
+ return Engines::PyScriptNode::_duplicate(tmpVar);
+ else
+ return Engines::PyScriptNode::_nil();
+ }
}
//=============================================================================