LINUX.ORG.RU

Проблема с getprotobynumber(3)


0

0

Добрый день!

Имеется некоторая программа, которая достаточно часто вызывает функцию getprotobynumber():

pe = getprotobynumber(proto);

if (dir > 0) {
  fprintf(stdout, "OUT %llu:%llu %u.%u.%u.%u:%u %u.%u.%u.%u:%u %s\n",
          received, sent, src[0], src[1], src[2], src[3], srcport,
          dst[0], dst[1], dst[2], dst[3], dstport, 
          pe?(pe->p_name):"unk");
  } else {
  fprintf(stdout, "IN %llu:%llu %u.%u.%u.%u:%u %u.%u.%u.%u:%u %s\n",
          received, sent, src[0], src[1], src[2], src[3], srcport,
          dst[0], dst[1], dst[2], dst[3], dstport, 
          pe?(pe->p_name):"unk");
} 

В какой-то (очень редкий) момент времени, программа начинает крутиться в бесконечном цикле:

open("/etc/protocols", O_RDONLY|O_CLOEXEC) = 4
fcntl64(4, F_GETFD)                     = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=2626, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fbf000
read(4, "# Internet (IP) protocols\n#\n# Upd"..., 4096) = 2626
close(4)                                = 0
munmap(0xb7fbf000, 4096)                = 0
open("/etc/protocols", O_RDONLY|O_CLOEXEC) = 4
fcntl64(4, F_GETFD)                     = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=2626, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fbf000
read(4, "# Internet (IP) protocols\n#\n# Upd"..., 4096) = 2626
close(4)                                = 0
....

Ничего, имеющего отношения к этой проблеме, в программе кроме указанного вызова getprotobynumber() нет. Есть идеи, из-за чего данная проблема может возникать?



Последнее исправление: cs (всего исправлений: 1)
Ответ на: комментарий от anonymous

Да, маленькая однотредовая программа.

 # ldd flowwatch
        linux-gate.so.1 =>  (0xffffe000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dd6000)
        /lib/ld-linux.so.2 (0xb7f22000)
cs
() автор топика

Хм...

ну зацикливаться именно в этом месте просто не может, если только не какой-то мегабаг компилера и/или железа.

Может просто функция с этим куском постоянно вызывается предыдущей по стеку функцией? Просто такой узкий кат не даёт простора размышлениям.

farisey
()

ИМХО надо перепроверить код на предмет повреждения стека. А то такая любовь к длинному форматированию в printf пугает.

pathfinder ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.