[peruser] interesting peruser problem

Alex Timofeyev alext at infobox.ru
Fri Apr 7 09:29:58 MDT 2006


We have a similar problem with our server. Apache going down and did not 
responding at any connections. Have at log many errors
child pid 18590 exit signal Segmentation fault (11)

The problem have at Multiplexer, after killing this process apache began 
working normally. We try do strace on this process
and has only

strace -p 18271
Process 18271 attached - interrupt to quit
poll(


What all. We are try compiling peruser with gcc-4.1 but has same result.
How we can solve this problem? Any idea?

Our server:
2*Xeon(TM) CPU 3.00GHz
System Debian 3.1 sarge
Apache 2.0.55 + peruser0.2.0 + mod_php4.4.2

Alex Timofeyev.

Severn wrote:
> I've been poking at it some more... I did make some mistakes in the 
> config I posted before.
>
> -KeepAlive is now Off
> -In the vhost, Processor is now ServerEnvironment (this caused the 
> senv segfault)
> -Typoed the IPs while editing it (though it was right in my actual 
> config)
>
> It doesn't segfault at the senv enymore.. instead it does this--
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 182919131456 (LWP 22254)]
> apr_os_sock_put (sock=0x7fbfffe038, thesock=0x7fbfffe044, cont=0x5bd138)
>     at sockets.c:383
> 383         (*sock)->local_port_unknown = 
> (*sock)->local_interface_unknown = 1;
> (gdb) bt full
> #0  apr_os_sock_put (sock=0x7fbfffe038, thesock=0x7fbfffe044, 
> cont=0x5bd138)
>     at sockets.c:383
> No locals.
> #1  0x000000000045d41d in child_main (child_num_arg=Variable 
> "child_num_arg" is not available.
> ) at peruser.c:1566
>         ptrans = (apr_pool_t *) 0x6913f8
>         allocator = (apr_allocator_t *) 0x685230
>         status = Variable "status" is not available.
> (gdb) list
> 1566        apr_os_sock_put((void*)&pod_sock, &fd, pconf);
> 1567        listen_add(pconf, pod_sock, check_pipe_of_death);
> 1568
> 1569        (peruser_setup_child(my_child_num) && 
> clean_child_exit(APEXIT_CHILDFATAL));
> 1570        ap_run_child_init(pchild, ap_server_conf);
> 1571
> 1572        ap_create_sb_handle(&sbh, pchild, my_child_num, 0);
> 1573        (void) ap_update_child_status(sbh, SERVER_READY, 
> (request_rec *) NULL);
> 1574
> 1575        /* Set up the pollfd array */
> (gdb) print pod_sock
> No symbol "pod_sock" in current context.
> (gdb) list apr_os_sock_put
> 368         return APR_SUCCESS;
> 369     }
> 370
> 371     apr_status_t apr_os_sock_put(apr_socket_t **sock, 
> apr_os_sock_t *thesock,
> 372                                apr_pool_t *cont)
> 373     {
> 374         /* XXX Bogus assumption that *sock points at anything legit */
> 375         if ((*sock) == NULL) {
> 376             alloc_socket(sock, cont);
> 377             /* XXX IPv6 figure out the family here! */
> (gdb) print sock
> $1 = (apr_socket_t **) 0x7fbfffe038
> (gdb) print *sock
> $2 = (apr_socket_t *) 0x14
> (gdb) print **sock
> Cannot access memory at address 0x14
>
> --
>
> If I enable MPM_PERUSER_DEBUG however, *sock is 0x0 and everything 
> seems to work fine... (how the heck does turning on debug affect 
> pointers?)
>
> -Severn
>
> On 4/2/06, *Stefan Seufert* <stefan at seuf.de <mailto:stefan at seuf.de>> 
> wrote:
>
>     I've been able to attach a debugger and thus have been able to locate
>     the cause of the crash:
>
>     > Program received signal SIGSEGV, Segmentation fault.
>     > [Switching to Thread -1208174912 (LWP 11331)]
>     > 0x0809cffa in peruser_post_read (r=0x8bc9c30) at peruser.c:2566
>     > 2566            processor =
>     &CHILD_INFO_TABLE[sconf->senv->processor_id];
>     > (gdb) bt full
>     > #0  0x0809cffa in peruser_post_read (r=0x8bc9c30) at peruser.c:2566
>     >         sconf = (peruser_server_conf *) 0x8bb9628
>     >         processor = Variable "processor" is not available.
>     > (gdb) list
>     > 2566            processor =
>     &CHILD_INFO_TABLE[sconf->senv->processor_id];
>     > 2567        else
>     > 2568            processor = &CHILD_INFO_TABLE[r->connection->id];
>     > 2569
>     > 2570
>     > 2571        if (!strlen(r->the_request))
>     > 2572        {
>     > 2573            _DBG("corrupt request. aborting",0);
>     > 2574            return DECLINED;
>     > 2575        }
>     > (gdb) print sconf
>     > $1 = (peruser_server_conf *) 0x8bb9628
>     > (gdb) print sconf->senv
>     > $2 = (server_env_t *) 0x0
>     > (gdb)
>
>     It looks like sconf->senv isn't set. The ->processor_id access then
>     causes the segfault. So the next question is: Why is it empty? Maybe
>     just a configuration problem we haven't covered? Sean, any ideas?
>
>     Stefan
>     _______________________________________________
>     Peruser mailing list
>     Peruser at telana.com <mailto:Peruser at telana.com>
>     http://www.telana.com/mailman/listinfo/peruser
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Peruser mailing list
> Peruser at telana.com
> http://www.telana.com/mailman/listinfo/peruser
>   




More information about the Peruser mailing list