On Tue, Aug 28, 2007 at 11:28:31PM +0400, Alexey Rymonin wrote:
> >> Current function is ngx_devpoll_process_events
> >> 406 if (c->fd == -1) {
> >> (dbx) gdb on
> >>
> >> (dbx) p events
> >> events = 2
> >> (dbx) p i
> >> i = 1
> >> (dbx) p event_list[i]
> >> event_list[i] = {
> >> fd = 29
> >> events = 1
> >> revents = 1
> >> }
> >> (dbx) p ngx_cycle->files[event_list[i].fd]
> >> ngx_cycle->files[event_list[i].fd] = (nil)
>
> IS> p n
> IS> p change_list[0]
> IS> p change_list[1]
> IS> p change_list[2]
>
> (dbx) p n
> n = 59821U
> (dbx) p change_list[0]
> change_list[0] = {
> fd = 28
> events = 2048
> revents = 0
> }
> (dbx) p change_list[1]
> change_list[1] = {
> fd = 29
> events = 2048
> revents = 0
> }
> (dbx) p change_list[2]
> change_list[2] = {
> fd = 26
> events = 2048
> revents = 0
> }
В данном случае нельзя утверждать наверняка (это можно было бы при наличии
отладочного лога, но, боюсь, его трудно будет включить на нагрузке), но
у меня есть подозрение, что SUN опять облажался. На этот раз со старым
проверенным интерфейсом /dev/poll.
Значение n уже потеряно, но если change_list[1] относится к текущей
итерации, то это означает, что nginx удалил (2048 - POLLREMOVE) дескриптор
29 из /dev/poll, и поставил NULL в ngx_cycle->files[29], а /dev/poll всё
равно вернул событие для этого дескриптора.
А что показывают
p change_list[3]
p change_list[4]
p change_list[5]
p change_list[6]
p change_list[7]
?
--
Игорь Сысоев
http://sysoev.ru