Nicholas Milkovits
nmilkovits at gmail.com
Sat Mar 24 14:31:20 EST 2007
Hello, I am trying to find out the cause of a segmentation fault that occurs when occasionally processing database requests. The environment is Apache 2.0.59 (it happens when run in either prefork or threaded), Mod Python 3.3.1, Python 2.5 and cx_Oracle 4.3. All of this software was compiled from source. The database is Oracle 10g (I believe). I have pasted a stack trace from gdb below but here is my question: It appears the seg fault is in the database code but in frames 17 - 14 it appears as though the func argument is a NULL pointer. How is it possible that execution continues after the call from python_handler into the interpreter when the beginning of the PyObject_CallMethod is supposed to raise an error if the func argument is NULL. Is this a problem with gdb or is there something going on that I am missing? Thanks for the help PyObject * PyObject_CallMethod(PyObject *o, char *name, char *format, ...) { va_list va; PyObject *args; PyObject *func = NULL; PyObject *retval = NULL; if (o == NULL || name == NULL) return null_error(); .....function continues #0 0xad8d7ba5 in kpureq2 () from /usr/vendor/pkg/oracle/product/10.2.0/lib/libclntsh.so.10.1 #1 0xad9b6dc3 in OCIStmtPrepare2 () from /usr/vendor/pkg/oracle/product/10.2.0/lib/libclntsh.so.10.1 #2 0x069ac873 in Cursor_InternalPrepare (self=0x9968d80, statement=0x98b326c) at Cursor.c:1073 #3 0x069ad82d in Cursor_Execute (self=0xacb8f020, args=0x1774, keywordArgs=0x98b326c) at Cursor.c:1397 #4 0x00674561 in PyCFunction_Call (func=0xacba58ec, arg=0xacb48eac, kw=0xae41c10c) at Objects/methodobject.c:77 #5 0x006a9ff6 in PyEval_EvalFrameEx (f=0x994c19c, throwflag=0) at Python/ceval.c:3566 #6 0x006aaff3 in PyEval_EvalFrameEx (f=0x994c02c, throwflag=0) at Python/ceval.c:3652 #7 0x006aaff3 in PyEval_EvalFrameEx (f=0x98198c4, throwflag=0) at Python/ceval.c:3652 #8 0x006aaff3 in PyEval_EvalFrameEx (f=0x9819724, throwflag=0) at Python/ceval.c:3652 #9 0x006aaff3 in PyEval_EvalFrameEx (f=0x97f3bf4, throwflag=0) at Python/ceval.c:3652 #10 0x006ab8a6 in PyEval_EvalCodeEx (co=0xae6585c0, globals=0xae41c10c, locals=0x1774, args=0x7, argcount=0, kws=0x97f3b84, kwcount=7, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:2833 #11 0x006a9c6c in PyEval_EvalFrameEx (f=0x97f39fc, throwflag=0) at Python/ceval.c:3661 #12 0x006ab8a6 in PyEval_EvalCodeEx (co=0xae658698, globals=0xae41c10c, locals=0x1774, args=0x0, argcount=2, kws=0x0, kwcount=0, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:2833 #13 0x00701318 in function_call (func=0xae5dd144, arg=0xad71790c, kw=0x0) at Objects/funcobject.c:517 #14 0x0064f397 in PyObject_Call (func=0x0, arg=0x1774, kw=0x1774) at Objects/abstract.c:1860 #15 0x00658cee in instancemethod_call (func=0x1774, arg=0xad71790c, kw=0x1774) at Objects/classobject.c:2493 #16 0x0064f397 in PyObject_Call (func=0x0, arg=0x1774, kw=0x1774) at Objects/abstract.c:1860 #17 0x0064f750 in PyObject_CallMethod (o=0x0, name=0xad72456c "\001", format=0x72ae92 "O") at Objects/abstract.c:1891 #18 0x00648c32 in python_handler (req=0x993a038, phase=0x71ba44 "PythonHandler") at mod_python.c:1652 #19 0x0064a9ca in PythonHandler (req=0x993a038) at mod_python.c:2878
|