Nginx 0.4.9 crashes using /dev/poll on Solaris 10 on Sparc
Igor Sysoev
is at rambler-co.ru
Fri Oct 20 18:12:53 MSD 2006
On Fri, 20 Oct 2006, Per Jonsson wrote:
> We're running Nginx 0.4.9 on Solaris 10 on Sparc, and are experiencing
> worker processes that are crashing with SIGSEGV.
>
> Running a debugger which I'm not feeling very at home with, I believe that
> I managed to locate the offending code.
>
> The debugger gives:
> root at facexpaces objs # mdb nginx
>> ::run
> mdb: fork1 detected: follow (p)arent or (c)hild? c
> mdb: target forked child process 15778 (debugger following child)
> mdb: fork1 detected: follow (p)arent or (c)hild? c
> mdb: target forked child process 15779 (debugger following child)
> mdb: stop on SIGSEGV
> mdb: target stopped at:
> ngx_devpoll_process_events+0x208: ld [%i1 + 0xc], %g1
> mdb: You've got symbols!
> Loading modules: [ ld.so.1 libc.so.1 ]
>> ::regs
> %g0 = 0x00000000 %l0 = 0x00000001
> %g1 = 0x00000194 %l1 = 0x00000001
> %g2 = 0x00000000 %l2 = 0x00000016
> %g3 = 0x00000000 %l3 = 0x00096a88
> %g4 = 0x00000000 %l4 = 0x00000000
> %g5 = 0x00000000 %l5 = 0x00092c00
> %g6 = 0x00000000 %l6 = 0x04000000
> %g7 = 0xff392000 %l7 = 0x00004000
> %o0 = 0x000d4250 %i0 = 0x0008ac00
> %o1 = 0x00096d50 %i1 = 0x00000000
> %o2 = 0xffbff9d0 %i2 = 0x00000000
> %o3 = 0x00000000 %i3 = 0x00000000
> %o4 = 0x00096a88 %i4 = 0x0006bc00
> %o5 = 0x000cb7f8 %i5 = 0x0006bc00
> %o6 = 0xffbff968 %i6 = 0xffbff9f0
> %o7 = 0x0002efe0 ngx_devpoll_process_events+0x44c %i7 = 0x00023750
> ngx_process_events_and_timers+0xb8
>
> %psr = 0xfe901006 impl=0xf ver=0xe icc=NzvC
> ec=0 ef=4096 pil=0 s=0 ps=0 et=0 cwp=0x6
> %y = 0x00000003
> %pc = 0x0002ed9c ngx_devpoll_process_events+0x208
> %npc = 0x0002eda0 ngx_devpoll_process_events+0x20c
> %sp = 0xffbff968
> %fp = 0xffbff9f0
>
> %wim = 0x00000000
> %tbr = 0x00000000
>>
>
> Looking at the code I believe that it's line 403 in ngx_devpoll_module.c,
> inside the function ngx_devpoll_process_events.
> for (i = 0; i < events; i++) {
> c = ngx_cycle->files[event_list[i].fd];
>
>> if (c->fd == -1) {
> if (c->read->closed) {
> continue;
> }
>
> ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "unexpected event");
> continue;
> }
>
>
>
> I hope that this bugreport is helpful, and are willing to help locating the
> problem further, and testing possible solutions.
When you get segfault ? Just when run nginx or some conditions are needed ?
Could you use gdb ?
Igor Sysoev
http://sysoev.ru/en/
More information about the nginx
mailing list