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;
- 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);
}
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);
- 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-----------------" );
+ 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;