X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGraphExecutor%2FDataFlowExecutor_PyDynInvoke.cxx;h=fbb844039e11b407e5e1615867eaa533ddfc29be;hb=HEAD;hp=9e5a35771b36918566e356d204008ba9fb6e15fe;hpb=0523de189224d3c253468f9f7f994d39a4fc01fc;p=modules%2Fsuperv.git diff --git a/src/GraphExecutor/DataFlowExecutor_PyDynInvoke.cxx b/src/GraphExecutor/DataFlowExecutor_PyDynInvoke.cxx index 9e5a357..fbb8440 100644 --- a/src/GraphExecutor/DataFlowExecutor_PyDynInvoke.cxx +++ b/src/GraphExecutor/DataFlowExecutor_PyDynInvoke.cxx @@ -54,6 +54,15 @@ bool GraphExecutor::InNode::InitPython() { Py_InitModule( "InitPyRunMethod" , MethodPyRunMethod ) ; // asv : 20.01.05 : changes involved with switching to old (HEAD) KERNEL //_OutNode->SuperVisionContainer()->ActivatePythonExecution( "InitPyRunMethod" , MethodPyRunMethod ) ; + + // PAL10310: patch on omniORB + string aPyFunc; + aPyFunc = "import omnipatch\n" ; + if ( PyRun_SimpleString( (char *) aPyFunc.c_str() ) ) { + cdebug << ThreadNo() << " " << Name() << " PyRun_SimpleString ERROR " << endl << aPyFunc << endl ; + Automaton()->PyUnLock() ; + return false ; + } } // PyObject * Dictionnary = PyModule_GetDict( Module ) ; // InitPyDynInvokeError = PyErr_NewException( "InitPyDynInvokeError" , NULL , NULL ) ; @@ -97,8 +106,9 @@ bool GraphExecutor::InNode::InitPython() { aPyFunc += "import sys\n" ; aPyFunc += "import CORBA\n" ; aPyFunc += "import omniORB\n" ; + aPyFunc += "orb = CORBA.ORB_init( sys.argv , CORBA.ORB_ID )\n" ; aPyFunc += "def PyObjRef( IORObjStr ) :\n" ; - aPyFunc += " orb = CORBA.ORB_init( sys.argv , CORBA.ORB_ID )\n" ; + // aPyFunc += " orb = CORBA.ORB_init( sys.argv , CORBA.ORB_ID )\n" ; aPyFunc += " objref = orb.string_to_object( IORObjStr )\n" ; aPyFunc += " return objref\n" ; aPyFunc += "InitPyRunMethod.RunMethod( PyObjRef )\n" ; @@ -123,8 +133,9 @@ bool GraphExecutor::InNode::InitPython() { aPyFunc += "import sys\n" ; aPyFunc += "import CORBA\n" ; aPyFunc += "import omniORB\n" ; + aPyFunc += "orb = CORBA.ORB_init( sys.argv , CORBA.ORB_ID )\n" ; aPyFunc += "def PyObjIor( ObjRef ) :\n" ; - aPyFunc += " orb = CORBA.ORB_init( sys.argv , CORBA.ORB_ID )\n" ; + // aPyFunc += " orb = CORBA.ORB_init( sys.argv , CORBA.ORB_ID )\n" ; aPyFunc += " objIor = orb.object_to_string( ObjRef )\n" ; aPyFunc += " return objIor\n" ; aPyFunc += "InitPyRunMethod.RunMethod( PyObjIor )\n" ; @@ -172,6 +183,19 @@ PyObject * GraphExecutor::InNode::InitPyDynInvoke( char * PyFuncName , if ( strlen( PyFuncName ) ) { Automaton()->PyLock() ; thePyRunMethod = Automaton()->PyFunction( PyFuncName ) ; + + //thePyRunMethod = NULL; + // asv 28.02.05 : VERY BAD fix of the following problem: after change of a function, + // the changes are NOT taken into account by Automation - it returns PyObject of the OLD function. + // so here we force re-automating the PyObject EVERY TIME, regardless if the function has changed or not. + // Once again - it is a very bad solution, it fully discards the whole idea of automation, + // here is it done as a quick fix for a bug. + // A better solution (to be implemented): store the PyObject NOT in Automation map, but in + // InLine node itself! And if the method is changed - remove the PyObject and force to regenerate it. + // But this means that PyObject must be stored in Editor's data model. + // asv 01.03.05 : the fix is not needed, the described bug is not reproduced. To investigate: + // WHERE PyObject is removed from Automation map on function change. + if ( (*aPythonFunction).length() ) { if ( thePyRunMethod == NULL ) { unsigned int i ; @@ -239,7 +263,7 @@ extern "C" PyObject * PyRunMethod( PyObject * dummy , PyObject * Args ) { return Result ; } -#define PyDynInvokeTrace 1 +#define PyDynInvokeTrace 0 bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , const char *method , ServicesAnyData * InParametersList , int nInParams , @@ -275,9 +299,9 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , PyObject * ArgsList = NULL ; PyObject * ArgValue = NULL ; PyObject * Result = NULL ; - PyObject * MyPyObjRefList = NULL ; + //PyObject * MyPyObjRefList = NULL ; PyObject * ResultObj = NULL ; - PyObject * MyPyObjIorList = NULL ; + //PyObject * MyPyObjIorList = NULL ; PyObject * ResultIor = NULL ; CORBA::Object_ptr ObjRef ; @@ -296,7 +320,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , sname = InParametersList[i].Name.c_str() ; switch ( data.type()->kind() ) { case CORBA::tk_string : { - char * t ; + const char * t ; data >>= t ; PyObject * ArgValue = Py_BuildValue( "s" , t ) ; PyTuple_SetItem( ArgsList , i , ArgValue ) ; @@ -332,7 +356,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , break ; } case CORBA::tk_short : { - short s ; + CORBA::Short s ; data >>= s ; PyObject * ArgValue = Py_BuildValue( "h" , s ) ; PyTuple_SetItem( ArgsList , i , ArgValue ) ; @@ -344,9 +368,16 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , break ; } case CORBA::tk_long : { - long l ; + CORBA::Long l ; data >>= l ; - PyObject * ArgValue = Py_BuildValue( "l" , l ) ; +// epa - Porting to 64-bit Linux:CORBA::Long is incorrectly treated as unsigned +// integer by Py_BuildValue("l", val) in Python 2.4.1. Using Py_BuildValue("i",val) +// seemsto help + PyObject * ArgValue = NULL; + if ( SIZEOF_LONG == 4 ) + ArgValue = Py_BuildValue( "l" , l ) ; + else + ArgValue = Py_BuildValue( "i" , l ) ; #if PyDynInvokeTrace cdebug << "ArgIn" << i << " : " << sname << " " << method << " Value " << l << " ArgValue->ob_refcnt" << ArgValue->ob_refcnt << endl ; @@ -354,13 +385,13 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , PyTuple_SetItem( ArgsList , i , ArgValue ) ; #if PyDynInvokeTrace cdebug << "ArgIn" << i << " : " << sname << " " << method << " Value " << l - << " (long) ArgsList->ob_refcnt" << ArgsList->ob_refcnt << " ArgValue->ob_refcnt" + << " (CORBA::Long) ArgsList->ob_refcnt" << ArgsList->ob_refcnt << " ArgValue->ob_refcnt" << ArgValue->ob_refcnt << endl ; #endif break ; } case CORBA::tk_float : { - float f ; + CORBA::Float f ; data >>= f ; PyObject * ArgValue = Py_BuildValue( "f" , f ) ; PyTuple_SetItem( ArgsList , i , ArgValue ) ; @@ -372,7 +403,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , break ; } case CORBA::tk_double : { - double d ; + CORBA::Double d ; data >>= d ; PyObject * ArgValue = Py_BuildValue( "d" , d ) ; PyTuple_SetItem( ArgsList , i , ArgValue ) ; @@ -384,27 +415,27 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , break ; } case CORBA::tk_objref : { - MyPyObjRefList = PyTuple_New( 1 ) ; - PyObject * ObjValue ; + //MyPyObjRefList = PyTuple_New( 1 ) ; + //PyObject * ObjValue ; #if OMNIORB_VERSION >= 4 data >>= (CORBA::Any::to_object ) ObjRef ; #else data >>= ObjRef ; #endif IORObjRef = ObjectToString( ObjRef ) ; - ObjValue = Py_BuildValue( "s" , IORObjRef ) ; - PyTuple_SetItem( MyPyObjRefList , 0 , ObjValue ) ; + //ObjValue = Py_BuildValue( "s" , IORObjRef ) ; + //PyTuple_SetItem( MyPyObjRefList , 0 , ObjValue ) ; #if PyDynInvokeTrace - cdebug << "ArgIn" << i << " : " << sname << " " << method << " " << " Value " << IORObjRef << " (objref) " - << MyPyObjRef->ob_refcnt << "/" << MyPyObjRefList->ob_refcnt << endl ; + cdebug << "ArgIn" << i << " : " << sname << " " << method << " " << " Value " << IORObjRef << " (objref) "<< endl ; + // << MyPyObjRef->ob_refcnt << "/" << MyPyObjRefList->ob_refcnt << endl ; #endif // ResultObj = PyEval_CallObject( MyPyObjRef , MyPyObjRefList ) ; - ResultObj = PyEvalCallObject( "PyObjRef" , MyPyObjRef , MyPyObjRefList ) ; + //ResultObj = PyEvalCallObject( "PyObjRef" , MyPyObjRef , MyPyObjRefList ) ; #if PyDynInvokeTrace - cdebug << "ObjValue->ob_refcnt" << ObjValue->ob_refcnt << endl ; + //cdebug << "ObjValue->ob_refcnt" << ObjValue->ob_refcnt << endl ; #endif - ArgValue = Py_BuildValue( "O" , ResultObj ) ; - PyTuple_SetItem( ArgsList , i , ArgValue ) ; + //ArgValue = Py_BuildValue( "O" , ResultObj ) ; + //PyTuple_SetItem( ArgsList , i , ArgValue ) ; #if PyDynInvokeTrace if ( ArgValue ) cdebug << "ArgIn" << i << " : " << sname << " " << method << " Value (objref) ArgsList->ob_refcnt" @@ -412,22 +443,33 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , else cdebug << "ArgIn" << i << " : " << sname << " " << method << " Value (objref) ArgsList->ob_refcnt" << ArgsList->ob_refcnt << " ArgValue is NULL" << endl ; - cdebug << "MyPyObjRefList->ob_refcnt " << MyPyObjRefList->ob_refcnt-1 << endl ; -#endif - Py_DECREF( MyPyObjRefList ) ; - if ( CORBA::is_nil( ObjRef ) ) { - ResultObj = NULL ; - } - else { -#if PyDynInvokeTrace - if ( ResultObj ) - cdebug << "ResultObj->ob_refcnt " << ResultObj->ob_refcnt-1 << endl ; - else - cdebug << "ResultObj is NULL" << endl ; -#endif - if ( ResultObj ) - Py_DECREF( ResultObj ) ; - } + //cdebug << "MyPyObjRefList->ob_refcnt " << MyPyObjRefList->ob_refcnt-1 << endl ; +#endif + ResultObj = PyObject_CallFunction( MyPyObjRef , "s",IORObjRef ) ; + if(ResultObj == NULL){ + PyErr_Print(); + ResultObj=Py_None; + Py_INCREF(ResultObj) ; + } + PyTuple_SetItem( ArgsList , i , ResultObj ) ; + cdebug << "ArgIn" << i << " : " << sname << " " << method << " Value (objref) ArgsList->ob_refcnt" + << ArgsList->ob_refcnt << " ArgValue->ob_refcnt" << ResultObj->ob_refcnt << endl ; +// << ArgsList->ob_refcnt << " ArgValue->ob_refcnt" << ArgValue->ob_refcnt << endl ; + //cdebug << "MyPyObjRefList->ob_refcnt " << MyPyObjRefList->ob_refcnt-1 << endl ; + //Py_DECREF( MyPyObjRefList ) ; + //if ( CORBA::is_nil( ObjRef ) ) { + // ResultObj = NULL ; + //} + //else { + //#if PyDynInvokeTrace + //if ( ResultObj ) + //cdebug << "ResultObj->ob_refcnt " << ResultObj->ob_refcnt-1 << endl ; + //else + //cdebug << "ResultObj is NULL" << endl ; + //#endif + //if ( ResultObj ) + //Py_DECREF( ResultObj ) ; + //} break ; } default : { @@ -446,6 +488,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , if ( Result == NULL ) { cdebug_out << "GraphExecutor::InNode::PyDynInvoke Node " << Name() << " " << method << " Error Result == NULL" << endl ; + PyErr_Print(); RetVal = false ; } else { @@ -462,7 +505,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , else { ArgValue = Result ; } - if ( !PyString_Check( ArgValue ) ) { + if ( !ArgValue || !PyString_Check( ArgValue ) ) { cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (string)" << endl ; RetVal = false ; } @@ -471,9 +514,10 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , } data <<= t ; #if PyDynInvokeTrace - cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << t << " (string)" - << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" - << ArgValue->ob_refcnt << endl ; + if ( ArgValue ) + cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << t << " (string)" + << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" + << ArgValue->ob_refcnt << endl ; #endif break ; } @@ -486,7 +530,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , else { ArgValue = Result ; } - if ( !PyInt_Check( ArgValue ) ) { + if ( !ArgValue || !PyInt_Check( ArgValue ) ) { cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (boolean)" << endl ; RetVal = false ; } @@ -495,9 +539,10 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , } data <<= (CORBA::Any::from_boolean ) b ; #if PyDynInvokeTrace - cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << b << " (boolean)" - << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" - << ArgValue->ob_refcnt << endl ; + if ( ArgValue ) + cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << b << " (boolean)" + << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" + << ArgValue->ob_refcnt << endl ; #endif break ; } @@ -513,7 +558,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , //JR 04.04.2005 Debug if ( !PyInt_Check( ArgValue ) ) { //Difficult to understand that behavior ... Python char type is a string of length 1 ! // or type is int ... - if ( !PyString_Check( ArgValue ) && !PyInt_Check( ArgValue ) ) { + if ( !ArgValue || !PyString_Check( ArgValue ) && !PyInt_Check( ArgValue ) ) { cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (char)" << endl ; RetVal = false ; } @@ -522,9 +567,10 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , } data <<= (CORBA::Any::from_char ) c ; #if PyDynInvokeTrace - cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << c << " (char)" - << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" - << ArgValue->ob_refcnt << endl ; + if ( ArgValue ) + cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << c << " (char)" + << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" + << ArgValue->ob_refcnt << endl ; #endif break ; } @@ -537,7 +583,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , else { ArgValue = Result ; } - if ( !PyInt_Check( ArgValue ) ) { + if ( !ArgValue || !PyInt_Check( ArgValue ) ) { cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (short)" << endl ; RetVal = false ; } @@ -546,14 +592,15 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , } data <<= s ; #if PyDynInvokeTrace - cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << s << " (short)" - << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" - << ArgValue->ob_refcnt << endl ; + if ( ArgValue ) + cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << s << " (short)" + << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" + << ArgValue->ob_refcnt << endl ; #endif break ; } case CORBA::tk_long : { - long l = 0 ; + CORBA::Long l = 0 ; PyObject * ArgValue ; if ( PyTuple_Check( Result ) ) { ArgValue = PyTuple_GetItem( Result , i ) ; @@ -561,10 +608,10 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , else { ArgValue = Result ; } - if ( PyLong_Check( ArgValue ) ) { + if ( ArgValue && PyLong_Check( ArgValue ) ) { l = PyLong_AsLong( ArgValue ) ; } - else if ( PyInt_Check( ArgValue ) ) { + else if ( ArgValue && PyInt_Check( ArgValue ) ) { l = PyInt_AsLong( ArgValue ) ; } else { @@ -573,9 +620,10 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , } data <<= l ; #if PyDynInvokeTrace - cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << l << " (long)" - << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" - << ArgValue->ob_refcnt << endl ; + if ( ArgValue ) + cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << l << " (CORBA::Long)" + << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" + << ArgValue->ob_refcnt << endl ; #endif break ; } @@ -588,35 +636,43 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , else { ArgValue = Result ; } - if ( !PyFloat_Check( ArgValue ) ) { - // mkr : bug PAL12454 - if ( PyLong_Check( ArgValue ) ) { - cdebug << "ArgOut" << i << " : " << sname << " " << method << " OK (long)" << endl ; - long l = PyLong_AsLong( ArgValue ); - f = (float) l; - } - else if ( PyInt_Check( ArgValue ) ) { - cdebug << "ArgOut" << i << " : " << sname << " " << method << " OK (int)" << endl ; - long l = PyInt_AsLong( ArgValue ); - f = (float) l; + if ( ArgValue ) { + if ( !PyFloat_Check( ArgValue ) ) { + // mkr : bug PAL12454 + if ( PyLong_Check( ArgValue ) ) { + cdebug << "ArgOut" << i << " : " << sname << " " << method << " OK (CORBA::Long)" << endl ; + CORBA::Long l = PyLong_AsLong( ArgValue ); + f = (float) l; + } + else if ( PyInt_Check( ArgValue ) ) { + cdebug << "ArgOut" << i << " : " << sname << " " << method << " OK (int)" << endl ; + CORBA::Long l = PyInt_AsLong( ArgValue ); + f = (float) l; + } + else { + cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (float)" << endl ; + RetVal = false ; + } } else { - cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (float)" << endl ; - RetVal = false ; + f = PyFloat_AsDouble( ArgValue ) ; } } - else { - f = PyFloat_AsDouble( ArgValue ) ; + else { + cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (float)" << endl ; + RetVal = false ; } #ifdef REDHAT // mkr : debug for PAL12255 data <<= f ; #else - data.replace(CORBA::TypeCode::PR_float_tc(), (void*)(&f)); +//JR data.replace(CORBA::TypeCode::PR_float_tc(), (void*)(&f)); + data <<= (CORBA::Float) f ; #endif #if PyDynInvokeTrace - cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << f << " (float)" - << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" - << ArgValue->ob_refcnt << endl ; + if ( ArgValue ) + cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << f << " (float)" + << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" + << ArgValue->ob_refcnt << endl ; #endif break ; } @@ -629,41 +685,49 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , else { ArgValue = Result ; } - if ( !PyFloat_Check( ArgValue ) ) { - // mkr : bug PAL12454 - if ( PyLong_Check( ArgValue ) ) { - cdebug << "ArgOut" << i << " : " << sname << " " << method << " OK (long)" << endl ; - long l = PyLong_AsLong( ArgValue ); - d = (double) l; - } - else if ( PyInt_Check( ArgValue ) ) { - cdebug << "ArgOut" << i << " : " << sname << " " << method << " OK (int)" << endl ; - long l = PyInt_AsLong( ArgValue ); - d = (double) l; + if ( ArgValue ) { + if ( !PyFloat_Check( ArgValue ) ) { + // mkr : bug PAL12454 + if ( PyLong_Check( ArgValue ) ) { + cdebug << "ArgOut" << i << " : " << sname << " " << method << " OK (CORBA::Long)" << endl ; + CORBA::Long l = PyLong_AsLong( ArgValue ); + d = (double) l; + } + else if ( PyInt_Check( ArgValue ) ) { + cdebug << "ArgOut" << i << " : " << sname << " " << method << " OK (int)" << endl ; + CORBA::Long l = PyInt_AsLong( ArgValue ); + d = (double) l; + } + else { + cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (float)" << endl ; + RetVal = false ; + } } else { - cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (float)" << endl ; - RetVal = false ; + d = PyFloat_AsDouble( ArgValue ) ; } } - else { - d = PyFloat_AsDouble( ArgValue ) ; + else { + cdebug << "ArgOut" << i << " : " << sname << " " << method << " ERROR (float)" << endl ; + RetVal = false ; } #ifdef REDHAT // mkr : debug for PAL12255 data <<= d ; #else - data.replace(CORBA::TypeCode::PR_double_tc(), (void*)(&d)); +//JR data.replace(CORBA::TypeCode::PR_double_tc(), (void*)(&d)); + data <<= (CORBA::Double) d ; #endif #if PyDynInvokeTrace - cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << d << " (double)" - << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" - << ArgValue->ob_refcnt << endl ; + if ( ArgValue ) + cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << d << " (double)" + << " Result->ob_refcnt" << Result->ob_refcnt << " ArgValue->ob_refcnt" + << ArgValue->ob_refcnt << endl ; #endif break ; } case CORBA::tk_objref : { PyObject * ObjIor ; - MyPyObjIorList = PyTuple_New( 1 ) ; + //MyPyObjIorList = PyTuple_New( 1 ) ; if ( PyTuple_Check( Result ) ) { ObjIor = PyTuple_GetItem( Result , i ) ; } @@ -671,25 +735,28 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , ObjIor = Result ; } #if PyDynInvokeTrace - cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << "(object reference) " - << " Result->ob_refcnt" << Result->ob_refcnt << " ObjIor->ob_refcnt" - << ObjIor->ob_refcnt << endl ; + if ( ObjIor ) + cdebug << "ArgOut" << i << " : " << sname << " " << method << " Value " << "(object reference) " + << " Result->ob_refcnt" << Result->ob_refcnt << " ObjIor->ob_refcnt" + << ObjIor->ob_refcnt << endl ; #endif - Py_INCREF( ObjIor ) ; + //Py_INCREF( ObjIor ) ; // PyObject_Print( ObjIor , stdout , 0 ) ; - PyTuple_SetItem( MyPyObjIorList , 0 , ObjIor ) ; + //PyTuple_SetItem( MyPyObjIorList , 0 , ObjIor ) ; // ResultIor = PyEval_CallObject( MyPyObjIor , MyPyObjIorList ) ; - ResultIor = PyEvalCallObject( "PyObjIor" , MyPyObjIor , MyPyObjIorList ) ; + //ResultIor = PyEvalCallObject( "PyObjIor" , MyPyObjIor , MyPyObjIorList ) ; + ResultIor = PyObject_CallFunction( MyPyObjIor , "O",ObjIor ) ; #if PyDynInvokeTrace - cdebug << "ObjIor->ob_refcnt " << ObjIor->ob_refcnt-1 << endl ; + if ( ObjIor ) + cdebug << "ObjIor->ob_refcnt " << ObjIor->ob_refcnt-1 << endl ; #endif - Py_DECREF( ObjIor ) ; + //Py_DECREF( ObjIor ) ; #if PyDynInvokeTrace - cdebug << "MyPyObjIorList->ob_refcnt " << MyPyObjIorList->ob_refcnt-1 << endl ; + //cdebug << "MyPyObjIorList->ob_refcnt " << MyPyObjIorList->ob_refcnt-1 << endl ; #endif - Py_DECREF( MyPyObjIorList ) ; + //Py_DECREF( MyPyObjIorList ) ; #if PyDynInvokeTrace - cdebug << "MyPyObjIor->ob_refcnt " << MyPyObjIor->ob_refcnt << endl ; + //cdebug << "MyPyObjIor->ob_refcnt " << MyPyObjIor->ob_refcnt << endl ; #endif if ( ResultIor ) { char * IOR = NULL ; @@ -756,6 +823,7 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , } } else { + PyErr_Print(); cdebug_out << "GraphExecutor::InNode::PyDynInvoke Error ResultIor == NULL Node " << Name() << " method " << method << " " << endl ; RetVal = false ; @@ -823,6 +891,9 @@ bool GraphExecutor::InNode::PyDynInvoke( PyObject * MyPyRunMethod , Py_DECREF( ArgsList ) ; } + fflush(stdout); + fflush(stderr); + #if 0 { int i ;