Hello list,
I'm testing 3.2.6 version under FreeBSD 4.9. PythonConnectionHandler
test fails and apache dies with sigfault. Tested on:
Apache 2.0.50, Python 2.3
Apache 2.0.55, Python 2.4.2
Apache 2.0.55, Python 2.3
I've compiled debug versions of Apache and mod_python and was able to
reproduce failure of PythonConnectionHandler test under gdb. So here is
backtrace:
> #0 0x58 in ?? ()
> #1 0x2823e4af in conn_readline (self=0x82e7660, args=0x81c702c) at
> connobject.c:193
> #2 0x2825b8b8 in PyCFunction_Call ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #3 0x2828181f in call_function ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #4 0x2827fb64 in eval_frame ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #5 0x282819b7 in fast_function ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #6 0x282818a1 in call_function ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #7 0x2827fb64 in eval_frame ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #8 0x282809dc in PyEval_EvalCodeEx ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #9 0x282b6562 in function_call ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #10 0x282489f0 in PyObject_Call ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #11 0x2824d9cf in instancemethod_call ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #12 0x282489f0 in PyObject_Call ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #13 0x28248bff in PyObject_CallMethod ()
> from /home/volodya/apache20/mod_python-3.2.6/src/mod_python.so
> #14 0x2824521b in python_connection (con=0x8290128) at
> mod_python.c:1292
> #15 0x28246022 in PythonConnectionHandler (con=0x8290128) at
> mod_python.c:1940
> #16 0x8085fd0 in ap_run_process_connection (c=0x8290128) at
> connection.c:43
> #17 0x8086298 in ap_process_connection (c=0x8290128, csd=0x8290050) at
> connection.c:176
> #18 0x807b2ce in child_main (child_num_arg=0) at prefork.c:610
> #19 0x807b38c in make_child (s=0x80e5788, slot=0) at prefork.c:650
> #20 0x807b47e in startup_children (number_to_start=3) at prefork.c:722
> #21 0x807b76c in ap_mpm_run (_pconf=0x80e1018, plog=0x8119018,
> s=0x80e5788)
> at prefork.c:941
> #22 0x8081036 in main (argc=4, argv=0xbfbff6dc) at main.c:618
Segmentation fault is here (connobject.c):
static PyObject * conn_readline(connobject *self, PyObject *args)
{
long len = 0;
if (! PyArg_ParseTuple(args, "|l", &len))
return NULL;
return _conn_read(self->conn, AP_MODE_GETLINE, len);
^^^^
For some reason self-pointer contains illegal value. gdb output:
(gdb) p self
$2 = (connobject *) 0x58
Next thing. I tried the following (all under gdb):
1) Setup breakpoint at _conn_read function
2) Run the server
3) Initiate new client connection
4) gdb breaks at _conn_read
5) wait for a second
6) disable breakpoint at _conn_read (to stop breaking on arrival of each line
of client's http-traffic)
7) continue (gdb command to continue execution)
This way everything works fine (no segfault, test passes).
I've also tried mod_python 3.1.4 -- no segfaults, all tests were successfully
passed.
Do you have any ideas?
P.S. Sorry for the flood.