Salome HOME
projects
/
modules
/
yacs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
merge V9_dev
[modules/yacs.git]
/
src
/
runtime
/
DistributedPythonNode.cxx
diff --git
a/src/runtime/DistributedPythonNode.cxx
b/src/runtime/DistributedPythonNode.cxx
index 88dff018532dff40366d2a74c46a07dc45eba5b2..c1940e1dc47ce5d934259275fe9aafbfea5cc70c 100644
(file)
--- a/
src/runtime/DistributedPythonNode.cxx
+++ b/
src/runtime/DistributedPythonNode.cxx
@@
-113,13
+113,12
@@
void DistributedPythonNode::load()
if(!_container)
throw Exception("No container specified !");
SalomeContainer *containerCast0(dynamic_cast<SalomeContainer *>(_container));
if(!_container)
throw Exception("No container specified !");
SalomeContainer *containerCast0(dynamic_cast<SalomeContainer *>(_container));
- SalomeHPContainer
*containerCast1(dynamic_cast<SalomeHPContainer
*>(_container));
+ SalomeHPContainer
Base *containerCast1(dynamic_cast<SalomeHPContainerBase
*>(_container));
if(containerCast0)
objContainer=containerCast0->getContainerPtr(this);
else if(containerCast1)
{
if(containerCast0)
objContainer=containerCast0->getContainerPtr(this);
else if(containerCast1)
{
- YACS::BASES::AutoCppPtr<SalomeContainerTmpForHP> tmpCont(SalomeContainerTmpForHP::BuildFrom(containerCast1,this));
- objContainer=tmpCont->getContainerPtr(this);
+ objContainer=containerCast1->getContainerPtr(this);
}
else
throw Exception("Unrecognized type of container ! Salome one is expected !");
}
else
throw Exception("Unrecognized type of container ! Salome one is expected !");
@@
-181,11
+180,12
@@
void DistributedPythonNode::execute()
PyTuple_SetItem(args,pos,ob);
}
PyObject *serializationInput=PyObject_CallObject(_pyfuncSer,args);
PyTuple_SetItem(args,pos,ob);
}
PyObject *serializationInput=PyObject_CallObject(_pyfuncSer,args);
- std::string serializationInputC=PyBytes_AsString(serializationInput);
+ Py_ssize_t len = PyBytes_Size(serializationInput);
+ char* serializationInputC = PyBytes_AsString(serializationInput);
+ //int ret = PyBytes_AsStringAndSize(serializationInput, &serializationInputC, &len);
serializationInputCorba=new Engines::pickledArgs;
serializationInputCorba=new Engines::pickledArgs;
- int len=serializationInputC.length();
- serializationInputCorba->length(serializationInputC.length());
- for(int i=0;i<serializationInputC.length();i++)
+ serializationInputCorba->length(len+1);
+ for(int i=0;i<len+1;i++)
(*serializationInputCorba)[i]=serializationInputC[i];
Py_DECREF(serializationInput);
}
(*serializationInputCorba)[i]=serializationInputC[i];
Py_DECREF(serializationInput);
}
@@
-209,15
+209,25
@@
void DistributedPythonNode::execute()
resultCorbaC[resultCorba->length()]='\0';
for(int i=0;i<resultCorba->length();i++)
resultCorbaC[i]=(*resultCorba)[i];
resultCorbaC[resultCorba->length()]='\0';
for(int i=0;i<resultCorba->length();i++)
resultCorbaC[i]=(*resultCorba)[i];
+ int lenResCorba=resultCorba->length();
delete resultCorba;
{
AutoGIL agil;
args = PyTuple_New(1);
delete resultCorba;
{
AutoGIL agil;
args = PyTuple_New(1);
- PyObject* resultPython=PyBytes_FromString(resultCorbaC);
+ //PyObject* resultPython=PyBytes_FromString(resultCorbaC);
+ PyObject* resultPython=PyBytes_FromStringAndSize(resultCorbaC,lenResCorba);
delete [] resultCorbaC;
PyTuple_SetItem(args,0,resultPython);
PyObject *finalResult=PyObject_CallObject(_pyfuncUnser,args);
DEBTRACE( "-----------------DistributedPythonNode::outputs-----------------" );
delete [] resultCorbaC;
PyTuple_SetItem(args,0,resultPython);
PyObject *finalResult=PyObject_CallObject(_pyfuncUnser,args);
DEBTRACE( "-----------------DistributedPythonNode::outputs-----------------" );
+ if(finalResult == NULL)
+ {
+ std::stringstream msg;
+ msg << "Conversion with pickle of output ports failed !";
+ msg << " : " << __FILE__ << ":" << __LINE__;
+ _errorDetails=msg.str();
+ throw YACS::ENGINE::ConversionException(msg.str());
+ }
int nres=1;
if(finalResult == Py_None)
nres=0;
int nres=1;
if(finalResult == Py_None)
nres=0;
@@
-238,7
+248,7
@@
void DistributedPythonNode::execute()
{
OutputPyPort *p=(OutputPyPort *)*iter;
DEBTRACE( "port name: " << p->getName() );
{
OutputPyPort *p=(OutputPyPort *)*iter;
DEBTRACE( "port name: " << p->getName() );
- DEBTRACE( "port kind: " << p->
edGetType()->kind
() );
+ DEBTRACE( "port kind: " << p->
typeName
() );
DEBTRACE( "port pos : " << pos );
if(PyTuple_Check(finalResult))ob=PyTuple_GetItem(finalResult,pos) ;
else ob=finalResult;
DEBTRACE( "port pos : " << pos );
if(PyTuple_Check(finalResult))ob=PyTuple_GetItem(finalResult,pos) ;
else ob=finalResult;