Jeff Trawick <[EMAIL PROTECTED]> writes:

> . Current code (worker MPM on Linux, at least) will segfault like
>   crazy if you turn on APR_POOL_DEBUG and add "-lefence " to the
>   beginning of EXTRA_LIBS in config_vars.mk (I guess this is the
>   right way to use ElectricFence).

After sufficient sleep and/or caffiene, it occurred to me that I
should try a non-threaded build with efence and APR_POOL_DEBUG on this
Linux box.  Sure enough, plentiful segfaults, but more importantly
usable coredumps...

I just fixed one of the causes of segfaults (bad parm in mod_rewrite)
(another misstep on my part though...  in the hurry to try to find
the problem in different environments I neglected to modernize this
config file...  but at least we got a fix out of it :) ).

I'm still getting this segfault:

#0  0x80ceb33 in core_input_filter (f=0x40af7fec, b=0x40c13ff4,
 mode=AP_MODE_BLOCKING,
    readbytes=0xbffff9c8) at core.c:2882
2882        APR_BRIGADE_NORMALIZE(ctx->b);
(gdb) where
#0  0x80ceb33 in core_input_filter (f=0x40af7fec, b=0x40c13ff4,
 mode=AP_MODE_BLOCKING,
    readbytes=0xbffff9c8) at core.c:2882
#1  0x80c56d9 in ap_get_brigade (next=0x40af7fec, bb=0x40c13ff4,
 mode=AP_MODE_BLOCKING,
    readbytes=0xbffff9c8) at util_filter.c:362
#2  0x80cea2b in net_time_filter (f=0x40c2dfec, b=0x40c13ff4,
 mode=AP_MODE_BLOCKING,
    readbytes=0xbffff9c8) at core.c:2844
#3  0x80c56d9 in ap_get_brigade (next=0x40c2dfec, bb=0x40c13ff4,
 mode=AP_MODE_BLOCKING,
    readbytes=0xbffff9c8) at util_filter.c:362
#4  0x80c6c38 in ap_rgetline (s=0x40b1fe9c, n=8192, r=0x40b1fe84,
 fold=0) at protocol.c:225
#5  0x80c7227 in read_request_line (r=0x40b1fe84) at protocol.c:429
#6  0x80c789b in ap_read_request (conn=0x40aabfb8) at protocol.c:608
#7  0x807a2f9 in ap_process_http_connection (c=0x40aabfb8) at
 http_core.c:273
#8  0x80c2f1d in ap_run_process_connection (c=0x40aabfb8) at
 connection.c:84
#9  0x80c335d in ap_process_connection (c=0x40aabfb8) at
 connection.c:230
#10 0x80b49e0 in child_main (child_num_arg=28) at prefork.c:716
#11 0x80b4b79 in make_child (s=0x41af9f9c, slot=28) at prefork.c:806
#12 0x80b4e74 in perform_idle_server_maintenance (p=0x4021afd8) at
 prefork.c:947
#13 0x80b52be in ap_mpm_run (_pconf=0x4021afd8, plog=0x40797fd8,
 s=0x41af9f9c)
    at prefork.c:1118
#14 0x80bbd8e in main (argc=1, argv=0xbffffca4) at main.c:461
(gdb) p ctx
$1 = (core_ctx_t *) 0x40c43ffc
(gdb) p *ctx
$2 = {b = 0x40c49ff4}
(gdb)

This is fairly close to one of the segfaults I was trying to find
yesterday when I ended up going down other paths due to other bugs in
the server and due to missteps of my own.

That segfault has a similar traceback to the one shown above except
that it dies on this apr_bucket_read():

    /* we are reading a single LF line, e.g. the HTTP headers */
    while (!APR_BRIGADE_EMPTY(ctx->b)) {
        const char *pos;

        e = APR_BRIGADE_FIRST(ctx->b);
        rv = apr_bucket_read(e, &str, &len, mode);

        /* We should treat EAGAIN here the same as we do for EOF
        (brigade is

have coredump, will debug... 
-- 
Jeff Trawick | [EMAIL PROTECTED] | PGP public key at web site:
       http://www.geocities.com/SiliconValley/Park/9289/
             Born in Roswell... married an alien...

Reply via email to