X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FContainer%2FContainer_i.cxx;h=68373b289881b5a0bda0e0992352d05987b99b5a;hb=52111d0ad7a0d8acccc1bb4e49bb5877d949b844;hp=18e51ac2081f67943448d1a19d428b9603770140;hpb=d4d2eda0dbe527ecc80addfa3ab272435d505950;p=modules%2Fkernel.git diff --git a/src/Container/Container_i.cxx b/src/Container/Container_i.cxx index 18e51ac20..68373b289 100644 --- a/src/Container/Container_i.cxx +++ b/src/Container/Container_i.cxx @@ -1,4 +1,4 @@ -// 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 @@ -254,10 +254,18 @@ Engines_Container_i::~Engines_Container_i() delete _id; if(_NS) delete _NS; - if(!CORBA::is_nil(_dftPyNode)) - _dftPyNode->UnRegister(); - if(!CORBA::is_nil(_dftPyScriptNode)) - _dftPyScriptNode->UnRegister(); + for(std::map::iterator it=_dftPyNode.begin();it!=_dftPyNode.end();it++) + { + Engines::PyNode_var tmpVar((*it).second); + if(!CORBA::is_nil(tmpVar)) + tmpVar->UnRegister(); + } + for(std::map::iterator it=_dftPyScriptNode.begin();it!=_dftPyScriptNode.end();it++) + { + Engines::PyScriptNode_var tmpVar((*it).second); + if(!CORBA::is_nil(tmpVar)) + tmpVar->UnRegister(); + } } //============================================================================= @@ -985,10 +993,11 @@ Engines_Container_i::create_python_service_instance(const char * CompName, 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; } @@ -1040,10 +1049,10 @@ Engines_Container_i::createInstance(std::string genericRegisterName, 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() ; } @@ -1629,10 +1638,10 @@ void Engines_Container_i::copyFile(Engines::Container_ptr container, const char* 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; @@ -1679,16 +1688,25 @@ Engines::PyNode_ptr Engines_Container_i::createPyNode(const char* nodeName, cons 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::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 @@ -1698,7 +1716,6 @@ Engines::PyNode_ptr Engines_Container_i::createPyNode(const char* nodeName, cons es.text = astr.c_str(); throw SALOME::SALOME_Exception(es); } - } //============================================================================= @@ -1706,12 +1723,20 @@ Engines::PyNode_ptr Engines_Container_i::createPyNode(const char* nodeName, cons * */ //============================================================================= -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::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(); + } } //============================================================================= @@ -1749,13 +1774,23 @@ Engines::PyScriptNode_ptr Engines_Container_i::createPyScriptNode(const char* no 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::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 @@ -1772,12 +1807,20 @@ Engines::PyScriptNode_ptr Engines_Container_i::createPyScriptNode(const char* no * */ //============================================================================= -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::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(); + } } //=============================================================================