The crash seems to happen approximately daily. Here's more debugging text.

mi...@evo:~/frogmod-justice$ gdb frogserv core.14829
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...

warning: Can't read pathname for load map: Input/output error.
Reading symbols from /lib/i686/cmov/librt.so.1...done.
Loaded symbols for /lib/i686/cmov/librt.so.1
Reading symbols from /usr/lib/libGeoIP.so.1...done.
Loaded symbols for /usr/lib/libGeoIP.so.1
Reading symbols from /usr/lib/libz.so.1...done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /lib/i686/cmov/libresolv.so.2...done.
Loaded symbols for /lib/i686/cmov/libresolv.so.2
Reading symbols from /usr/lib/libstdc++.so.6...done.
Loaded symbols for /usr/lib/libstdc++.so.6
Reading symbols from /lib/i686/cmov/libm.so.6...done.
Loaded symbols for /lib/i686/cmov/libm.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/i686/cmov/libc.so.6...done.
Loaded symbols for /lib/i686/cmov/libc.so.6
Reading symbols from /lib/i686/cmov/libpthread.so.0...done.
Loaded symbols for /lib/i686/cmov/libpthread.so.0
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /lib/i686/cmov/libnss_files.so.2...done.
Loaded symbols for /lib/i686/cmov/libnss_files.so.2
Reading symbols from /lib/libnss_mdns4_minimal.so.2...done.
Loaded symbols for /lib/libnss_mdns4_minimal.so.2
Reading symbols from /lib/i686/cmov/libnss_dns.so.2...done.
Loaded symbols for /lib/i686/cmov/libnss_dns.so.2
Core was generated by `/home/mihai/frogmod-justice/frogserv'.
Program terminated with signal 11, Segmentation fault.
[New process 14829]
#0  evhttp_request_get_input_buffer (req=0x99d90f8) at http.c:3014
3014    {
(gdb) up
#1  0x08091a0e in _bufferevent_run_eventcb (bufev=0x20, what=0) at
bufferevent.c:264
264                     bufev->errorcb(bufev, what, bufev->cbarg);
Current language:  auto; currently c
(gdb)
#2  0x080928cd in bufferevent_connect_getaddrinfo_cb (result=-4,
ai=0x99e3100, arg=0x99d90f8) at bufferevent_sock.c:444
444                     _bufferevent_run_eventcb(bev, BEV_EVENT_ERROR);
(gdb) list 434
429     static void
430     bufferevent_connect_getaddrinfo_cb(int result, struct evutil_addrinfo 
*ai,
431         void *arg)
432     {
433             struct bufferevent *bev = arg;
434             struct bufferevent_private *bev_p =
435                 EVUTIL_UPCAST(bev, struct bufferevent_private, bev);
436             int r;
437             BEV_LOCK(bev);
438     
(gdb)
439             bufferevent_unsuspend_write(bev, BEV_SUSPEND_LOOKUP);
440             bufferevent_unsuspend_read(bev, BEV_SUSPEND_LOOKUP);
441     
442             if (result != 0) {
443                     bev_p->dns_error = result;
444                     _bufferevent_run_eventcb(bev, BEV_EVENT_ERROR);
445                     _bufferevent_decref_and_unlock(bev);
446                     if (ai)
447                             evutil_freeaddrinfo(ai);
448                     return;
(gdb) print bev[0]
$1 = {ev_base = 0x981d660, be_ops = 0x80ab4e0, ev_read =
{ev_active_next = {tqe_next = 0x0, tqe_prev = 0x0}, ev_next =
{tqe_next = 0x0, tqe_prev = 0x99d9150}, ev_timeout_pos =
{ev_next_with_common_timeout = {
        tqe_next = 0xffffffff, tqe_prev = 0x0}, min_heap_idx = -1},
ev_fd = 21, ev_base = 0x981d660, _ev = {ev_io = {ev_io_next =
{tqe_next = 0x0, tqe_prev = 0x99d9168}, ev_timeout = {tv_sec = 0,
          tv_usec = 0}}, ev_signal = {ev_signal_next = {tqe_next =
0x0, tqe_prev = 0x99d9168}, ev_ncalls = 0, ev_pncalls = 0x0}},
ev_events = 18, ev_res = 0, ev_flags = 128, ev_pri = 5 '\005',
    ev_closure = 2 '\002', ev_timeout = {tv_sec = 0, tv_usec = 0},
ev_callback = 0x8092060 <bufferevent_readcb>, ev_arg = 0x99d90f8},
ev_write = {ev_active_next = {tqe_next = 0x0, tqe_prev = 0x0}, ev_next
= {
      tqe_next = 0x0, tqe_prev = 0x99eca48}, ev_timeout_pos =
{ev_next_with_common_timeout = {tqe_next = 0xffffffff, tqe_prev =
0x0}, min_heap_idx = -1}, ev_fd = 21, ev_base = 0x981d660, _ev =
{ev_io = {
        ev_io_next = {tqe_next = 0x0, tqe_prev = 0x984be68},
ev_timeout = {tv_sec = 45, tv_usec = 0}}, ev_signal = {ev_signal_next
= {tqe_next = 0x0, tqe_prev = 0x984be68}, ev_ncalls = 45, ev_pncalls =
0x0}},
    ev_events = 20, ev_res = 0, ev_flags = 128, ev_pri = 5 '\005',
ev_closure = 2 '\002', ev_timeout = {tv_sec = 803939, tv_usec =
464008}, ev_callback = 0x8091df0 <bufferevent_writecb>, ev_arg =
0x99d90f8},
  input = 0x99d9208, output = 0x99d9258, wm_read = {low = 0, high =
0}, wm_write = {low = 0, high = 0}, readcb = 0, writecb = 0, errorcb =
0x809d400 <evhttp_connection_cb>, cbarg = 0x99e3100, timeout_read = {
    tv_sec = 0, tv_usec = 0}, timeout_write = {tv_sec = 45, tv_usec =
0}, enabled = 0}
(gdb) print bev_p[0]
No symbol "bev_p" in current context.
(gdb)

It seems that by the time _bufferevent_run_eventcb() is called, its
bufev argument ends up being 0x20. No idea what to do next.


On Thu, Sep 16, 2010 at 11:17 AM, Mihai Draghicioiu
<mihai.draghici...@gmail.com> wrote:
> Hi, i've received a http/dns related crash inside libevent code, and
> i'm not sure if it's a libevent bug or my application's bug.
>
> I'm using 2.0.7-rc on linux.
>
> The code that uses the http code is here
> http://github.com/vampirefrog/frogmod-justice/blob/master/fpsgame/server.cpp#L746
> Lines 746-790.
> It tries to do a simple POST request to a pre-configured URL.
>
> The backtrace:
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0xb74af6c0 (LWP 8189)]
> evhttp_request_get_input_buffer (req=0x8a57dd0) at http.c:3014
> 3014    {
> Current language:  auto; currently c
> (gdb) backtrace
> #0  evhttp_request_get_input_buffer (req=0x8a57dd0) at http.c:3014
> #1  0x080919fe in _bufferevent_run_eventcb (bufev=0x20, what=0) at
> bufferevent.c:264
> #2  0x080928bd in bufferevent_connect_getaddrinfo_cb (result=-4,
> ai=0x8a47d50, arg=0x8a57dd0) at bufferevent_sock.c:444
> #3  0x0809fa39 in evdns_getaddrinfo_timeout_cb (fd=-1, what=1,
> ptr=0x8a58100) at evdns.c:4112
> #4  0x0808a5aa in event_base_loop (base=0x8607660, flags=<value
> optimized out>) at event.c:1288
> #5  0x0808b1b9 in event_base_dispatch (event_base=0x8607660) at event.c:1382
> #6  0x08061439 in rundedicatedserver () at
> /home/mihai/frogmod-justice/engine/server.cpp:828
> #7  0x08062c10 in initserver (listen=true, dedicated=true) at
> /home/mihai/frogmod-justice/engine/server.cpp:1010
> #8  0x08062d08 in main (argc=1, argv=0xbfdac3a4) at
> /home/mihai/frogmod-justice/engine/server.cpp:107
>
> I've stopped gdb without saving a core dump, but this crash has
> happened before and it will happen again. It seems to be related to
> dns timeout. If i add the http host in /etc/hosts, this crash doesn't
> happen anymore.
>
***********************************************************************
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-users    in the body.

Reply via email to