Common subdirectories: modules.old/codesets and modules/codesets Common subdirectories: modules.old/connections and modules/connections diff -u modules.old/omnipy.h modules/omnipy.h --- modules.old/omnipy.h 2007-01-19 14:11:09.000000000 +0300 +++ modules/omnipy.h 2008-10-02 17:11:07.000000000 +0400 @@ -324,6 +324,13 @@ void produceSystemException(PyObject* eobj, PyObject* erepoId, PyObject* etype, PyObject* etraceback); + + static + void handleUserPythonException(PyObject** erepoIdPtr, PyObject** etypePtr, PyObject** etracebackPtr, PyObject** evaluePtr); + + static + void handleLocationForwardException(PyObject* erepoId, PyObject* etype, PyObject* etraceback, PyObject* evalue); + // Handle the current Python exception. An exception must have // occurred. Deals with system exceptions and // omniORB.LocationForward; all other exceptions print a traceback diff -u modules.old/pyExceptions.cc modules/pyExceptions.cc --- modules.old/pyExceptions.cc 2006-07-05 14:46:16.000000000 +0400 +++ modules/pyExceptions.cc 2008-10-02 17:24:25.000000000 +0400 @@ -198,43 +198,63 @@ } -void -omniPy::handlePythonException() -{ + +void +omniPy::handleUserPythonException(PyObject** erepoIdPtr, PyObject** etypePtr, PyObject** etracebackPtr, PyObject** evaluePtr){ + OMNIORB_ASSERT(PyErr_Occurred()); - PyObject *etype, *evalue, *etraceback; - PyObject *erepoId = 0; - PyErr_Fetch(&etype, &evalue, &etraceback); - PyErr_NormalizeException(&etype, &evalue, &etraceback); + PyErr_Fetch(etypePtr, evaluePtr, etracebackPtr); + PyErr_NormalizeException(etypePtr, evaluePtr, etracebackPtr); + + PyObject* erepoId = *erepoIdPtr; + PyObject* etype = *etypePtr; + PyObject* etraceback = *etracebackPtr; + PyObject* evalue = *evaluePtr; + OMNIORB_ASSERT(etype); if (evalue) - erepoId = PyObject_GetAttrString(evalue, (char*)"_NP_RepositoryId"); + erepoId = PyObject_GetAttrString(evalue, (char*)"_NP_RepositoryId"); if (!(erepoId && PyString_Check(erepoId))) { - Py_XDECREF(erepoId); - if (omniORB::trace(1)) { - { - omniORB::logger l; - l << "Caught an unexpected Python exception during up-call.\n"; - } - PyErr_Restore(etype, evalue, etraceback); - PyErr_Print(); - } - OMNIORB_THROW(UNKNOWN, UNKNOWN_PythonException, - CORBA::COMPLETED_MAYBE); + PyErr_Clear(); + Py_XDECREF(erepoId); + if (omniORB::trace(1)) { + { + omniORB::logger l; + l << "Caught an unexpected Python exception during up-call.\n"; + } + PyErr_Restore(etype, evalue, etraceback); + PyErr_Print(); + } + OMNIORB_THROW(UNKNOWN, UNKNOWN_PythonException, + CORBA::COMPLETED_MAYBE); } - // Is it a LOCATION_FORWARD? - if (omni::strMatch(PyString_AS_STRING(erepoId), - "omniORB.LOCATION_FORWARD")) { - Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); - omniPy::handleLocationForward(evalue); - } +} + +void omniPy::handleLocationForwardException(PyObject* erepoId, PyObject* etype, PyObject* etraceback, PyObject* evalue){ + // Is it a LOCATION_FORWARD? + if (omni::strMatch(PyString_AS_STRING(erepoId), + "omniORB.LOCATION_FORWARD")) { + Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); + omniPy::handleLocationForward(evalue); + } + + // System exception + omniPy::produceSystemException(evalue, erepoId, etype, etraceback); +} + +void +omniPy::handlePythonException() +{ + PyObject *etype, *evalue, *etraceback; + PyObject *erepoId = 0; + + handleUserPythonException(&erepoId, &etype, &etraceback, &evalue); - // System exception - omniPy::produceSystemException(evalue, erepoId, etype, etraceback); + handleLocationForwardException(erepoId, etype, etraceback, evalue); } diff -u modules.old/pyLocalObjects.cc modules/pyLocalObjects.cc --- modules.old/pyLocalObjects.cc 2005-11-09 15:33:32.000000000 +0300 +++ modules/pyLocalObjects.cc 2008-10-02 17:23:16.000000000 +0400 @@ -410,28 +410,8 @@ // An exception of some sort was thrown PyObject *etype, *evalue, *etraceback; PyObject *erepoId = 0; - PyErr_Fetch(&etype, &evalue, &etraceback); - PyErr_NormalizeException(&etype, &evalue, &etraceback); - OMNIORB_ASSERT(etype); - - if (evalue) - erepoId = PyObject_GetAttrString(evalue, (char*)"_NP_RepositoryId"); - - if (!(erepoId && PyString_Check(erepoId))) { - Py_XDECREF(erepoId); - if (omniORB::trace(1)) { - { - omniORB::logger l; - l << "Caught an unexpected Python exception during up-call.\n"; - } - PyErr_Restore(etype, evalue, etraceback); - PyErr_Print(); - } - else { - Py_DECREF(etype); Py_XDECREF(evalue); Py_XDECREF(etraceback); - } - OMNIORB_THROW(UNKNOWN, UNKNOWN_PythonException, CORBA::COMPLETED_MAYBE); - } + + handleUserPythonException(&erepoId, &etype, &evalue, &etraceback); if (omni::strMatch(PyString_AS_STRING(erepoId), PortableServer::ForwardRequest::_PD_repoId)) { @@ -455,15 +435,7 @@ } } - // Is it a LOCATION_FORWARD? - if (omni::strMatch(PyString_AS_STRING(erepoId), - "omniORB.LOCATION_FORWARD")) { - Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); - omniPy::handleLocationForward(evalue); - } - - // System exception or unknown user exception - omniPy::produceSystemException(evalue, erepoId, etype, etraceback); + handleLocationForwardException(erepoId, etype, etraceback, evalue); } OMNIORB_ASSERT(0); // Never reach here return 0; @@ -582,28 +554,8 @@ // An exception of some sort was thrown PyObject *etype, *evalue, *etraceback; PyObject *erepoId = 0; - PyErr_Fetch(&etype, &evalue, &etraceback); - PyErr_NormalizeException(&etype, &evalue, &etraceback); - OMNIORB_ASSERT(etype); - - if (evalue) - erepoId = PyObject_GetAttrString(evalue, (char*)"_NP_RepositoryId"); - - if (!(erepoId && PyString_Check(erepoId))) { - Py_XDECREF(erepoId); - if (omniORB::trace(1)) { - { - omniORB::logger l; - l << "Caught an unexpected Python exception during up-call.\n"; - } - PyErr_Restore(etype, evalue, etraceback); - PyErr_Print(); - } - else { - Py_DECREF(etype); Py_XDECREF(evalue); Py_XDECREF(etraceback); - } - OMNIORB_THROW(UNKNOWN, UNKNOWN_PythonException, CORBA::COMPLETED_MAYBE); - } + + handleUserPythonException(&erepoId, &etype, &evalue, &etraceback); if (omni::strMatch(PyString_AS_STRING(erepoId), PortableServer::ForwardRequest::_PD_repoId)) { @@ -626,15 +578,8 @@ CORBA::COMPLETED_NO); } } - // Is it a LOCATION_FORWARD? - if (omni::strMatch(PyString_AS_STRING(erepoId), - "omniORB.LOCATION_FORWARD")) { - Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); - omniPy::handleLocationForward(evalue); - } - // System exception or unknown user exception - omniPy::produceSystemException(evalue, erepoId, etype, etraceback); + handleLocationForwardException(erepoId, etype, etraceback, evalue); } OMNIORB_ASSERT(0); // Never reach here return 0; diff -u modules.old/pyServant.cc modules/pyServant.cc --- modules.old/pyServant.cc 2008-02-01 19:29:17.000000000 +0300 +++ modules/pyServant.cc 2008-10-02 17:22:19.000000000 +0400 @@ -110,7 +110,6 @@ #include #include - // Implementation classes for ServantManagers and AdapterActivator class Py_ServantActivatorSvt : @@ -552,14 +551,14 @@ method = PyObject_GetAttrString(pyservant_, (char*)"_get_interface"); } if (!method) { - if (omniORB::trace(1)) { - omniORB::logger l; - l << "Python servant for `" << repoId_ << "' has no method named `" - << op << "'.\n"; - } - PyErr_Clear(); - OMNIORB_THROW(NO_IMPLEMENT, NO_IMPLEMENT_NoPythonMethod, - CORBA::COMPLETED_NO); + if (omniORB::trace(1)) { + omniORB::logger l; + l << "Python servant for `" << repoId_ << "' has no method named `" + << op << "'.\n"; + } + PyErr_Clear(); + OMNIORB_THROW(NO_IMPLEMENT, NO_IMPLEMENT_NoPythonMethod, + CORBA::COMPLETED_NO); } } @@ -571,33 +570,13 @@ // No exception was thrown. Set the return value pycd->setAndValidateReturnedValues(result); } + else { // An exception of some sort was thrown PyObject *etype, *evalue, *etraceback; PyObject *erepoId = 0; - PyErr_Fetch(&etype, &evalue, &etraceback); - PyErr_NormalizeException(&etype, &evalue, &etraceback); - OMNIORB_ASSERT(etype); - - if (evalue) - erepoId = PyObject_GetAttrString(evalue, (char*)"_NP_RepositoryId"); - - if (!(erepoId && PyString_Check(erepoId))) { - Py_XDECREF(erepoId); - if (omniORB::trace(1)) { - { - omniORB::logger l; - l << "Caught an unexpected Python exception during up-call.\n"; - } - PyErr_Restore(etype, evalue, etraceback); - PyErr_Print(); - } - else { - Py_DECREF(etype); Py_XDECREF(evalue); Py_XDECREF(etraceback); - } - OMNIORB_THROW(UNKNOWN, UNKNOWN_PythonException, CORBA::COMPLETED_MAYBE); - } + handleUserPythonException(&erepoId, &etype, &evalue, &etraceback); PyObject* exc_d = pycd->exc_d_; // Is it a user exception? @@ -607,21 +586,12 @@ PyObject* edesc = PyDict_GetItem(exc_d, erepoId); if (edesc) { - Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); - PyUserException ex(edesc, evalue, CORBA::COMPLETED_MAYBE); - ex._raise(); + Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); + PyUserException ex(edesc, evalue, CORBA::COMPLETED_MAYBE); + ex._raise(); } } - - // Is it a LOCATION_FORWARD? - if (omni::strMatch(PyString_AS_STRING(erepoId), - "omniORB.LOCATION_FORWARD")) { - Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); - omniPy::handleLocationForward(evalue); - } - - // System exception or unknown user exception - omniPy::produceSystemException(evalue, erepoId, etype, etraceback); + handleLocationForwardException(erepoId, etype, etraceback, evalue); } } @@ -743,51 +713,23 @@ // The call raised a Python exception PyObject *etype, *evalue, *etraceback; PyObject *erepoId = 0; - PyErr_Fetch(&etype, &evalue, &etraceback); - PyErr_NormalizeException(&etype, &evalue, &etraceback); - OMNIORB_ASSERT(etype); - if (evalue) - erepoId = PyObject_GetAttrString(evalue, (char*)"_NP_RepositoryId"); - - if (!(erepoId && PyString_Check(erepoId))) { - Py_XDECREF(erepoId); - if (omniORB::trace(1)) { - { - omniORB::logger l; - l << "Caught an unexpected Python exception during up-call.\n"; - } - PyErr_Restore(etype, evalue, etraceback); - PyErr_Print(); - } - else { - Py_DECREF(etype); Py_XDECREF(evalue); Py_XDECREF(etraceback); - } - OMNIORB_THROW(UNKNOWN, UNKNOWN_PythonException, CORBA::COMPLETED_MAYBE); - } + handleUserPythonException(&erepoId, &etype, &evalue, &etraceback); // Is it a user exception? if (exc_d != Py_None) { OMNIORB_ASSERT(PyDict_Check(exc_d)); PyObject* edesc = PyDict_GetItem(exc_d, erepoId); - + if (edesc) { - Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); - PyUserException ex(edesc, evalue, CORBA::COMPLETED_MAYBE); - ex._raise(); + Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); + PyUserException ex(edesc, evalue, CORBA::COMPLETED_MAYBE); + ex._raise(); } } - // Is it a LOCATION_FORWARD? - if (omni::strMatch(PyString_AS_STRING(erepoId), - "omniORB.LOCATION_FORWARD")) { - Py_DECREF(erepoId); Py_DECREF(etype); Py_XDECREF(etraceback); - omniPy::handleLocationForward(evalue); - } - - // System exception or unknown user exception - omniPy::produceSystemException(evalue, erepoId, etype, etraceback); + handleLocationForwardException(erepoId, etype, etraceback, evalue); } } Common subdirectories: modules.old/sslTP and modules/sslTP