memory violation error
Silvio Arcangeli
sarcangeli at montrouge.sema.slb.com
Fri Sep 14 05:16:07 EDT 2001
It's not a problem of references to Python objects.
The only arguments it takes are a string and a CObject (containing the
pointer for the CORBA connection, and it's a good pointer, since it's used
by all the other functions of the API I'm embedding in Python), and they
are referenced in the arguments tuple, so I don't think I need to take
ownership of such references.
Anyway, to be sure the problem was not "mine" I made a test function that
does just the following:
static PyObject * test (PyObject *unused1, PyObject *unused2){
Connect(connection);
if (connection ok){
CORBAFunction(connection, other constant and valid
parameters); // this one causes the problem
Disconnect(&connection);
}
return Py_BuildValue("s", "Ok");
}
This one doesn't even refer any python object, and does not take any argument.
This same code is working fine if I build it as a C application, but called
from Python it raises a memory violation error (that is not raised if I
comment out the line calling the CORBA function). The memory violation
error is raised when my function is returning, not when the CORBA function
is called.
I don't have access to the code of the CORBA function: I described this
problem to the programmer who wrote it, but for them it's correct, since
when tested in a C application it's working (and actually it returns all
the correct values, and the connection is still valid after it returns).
So I was trying to understand if for example there could be some memory
leak inside the function that does not cause a crash in a C application,
but makes my Python extension crash. I don't have a deep knowledge of how
Python allocates and deallocates memory when executing C functions, would
it be possible?
Silvio.
At 09:57 AM 9/13/01 -0400, you wrote:
> > When I call it from Python it raises a memory violation error. I'm quite
> > sure that this problem it's caused by the API function, since if I comment
> > out the line that calls it in the extension module the error is not raised.
> > (The code of the function in the extension module is bug free for sure, it
> > doesn't do anything else than calling PyArg_ParseTuple, the API function
> > and then Py_BuildVaule.)
> > The strange thing is that the API function seems to work fine in C, the
> > results are just the expected ones, and if I run the same code in a C
> > application no such error happens. The memory violation error happens only
> > when the function in the extension module is returning to the interpreter.
> > What could be the cause?
>
>Well, I'm guessing blind here, but I'd say it's because you borrow a reference
>in the C-side and forget to increment its reference count, and in the
>Python-side the reference disappers and so your C code is using an invalid
>memory location.
More information about the Python-list
mailing list