I have a strange crash in my C++ method when called from Python.  I have
a method that has one of the arguments a Python List.  The symptoms are
the same with an empty list and a non-empty one.

In one method, early in the code I call;
       boost::python::len( var )
and it returns properly.

HOWEVER, in another method, I am passing the *same value* from Python,
but the "boost::python::len( var )" aborts when "PyErr_Occurred()" is
called.  It causes an access violation (like a bad pointer dereference).

What is strange is that the line before (calling
PyObject_Length(obj.ptr() ) returns a proper size.

Any ideas?

------------------------------------------------------

namespace boost { namespace python {

    inline ssize_t len(object const& obj)
    {
        ssize_t result = PyObject_Length(obj.ptr());
        if (PyErr_Occurred()) throw_error_already_set();
        return result;
    }

}} // namespace boost::python

------------------------------------------------------

void PyService_Volume::Reconfigure(
                        const PyStorageSize & sizeInBytes,
                        const
iStor::UserAgent::UAEnums::VolumeCompositionName & compositionName,
                        const boost::python::list & disks,
                        int stripeWidth,
                        const iStor::UserAgent::UAEnums::StripeDepth &
stripeDepth)
{
        Py_BEGIN_ALLOW_THREADS
.
.
.

        if (boost::python::len(disks) > 0)
        {
                ...

------------------------------------------------------

John McLaughlin
iStor Networks, Inc.

_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to