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.

Reply via email to