INN 2.5.4 strange crash

Petr Novopashenniy pety at
Tue Jan 20 13:02:40 UTC 2015

On Mon, 19 Jan 2015, Julien ?LIE wrote:

J?? Hi Petr,
J?? > > In your message, the backtrace also hints at line 1284 of chan.c:
J?? > >     (*cp->Waker)(cp);
J?? > > but I do not see why an error would happen here.
J?? > > *cp->Waker is either SITEspoolwake or CHANwakeup but I do not see
J?? > > what could be NULL there.
J?? > 
J?? > After I rebuild INN with new flags ("-g -O0 -fno-inline"), I recently saw
J?? > 2 segfaults:
J?? Are you still regularly seeing segfaults?

Yes, frequently:

J?? > #0  0x0 in ?? ()
J?? > (gdb) bt
J?? > #0  0x0 in ?? ()
J?? > #1  0x805b7f0 in CHANreadloop () at chan.c:1284
J?? > #2  0x805db7b in main (ac=0, av=0xbfbfeec4) at innd.c:750
J?? > (gdb)
J?? > 
J?? > Line 1284 is still present in new gdb backtrace...
J?? I'm puzzled again by that backtrace.
J?? Just to be sure, do you have enough file descriptors on your system?

I think, yes:

kern.maxfiles: 12328
kern.maxfilesperproc: 11095

Resource limits (current):
  cputime          infinity secs
  filesize         infinity kb
  datasize           524288 kb
  stacksize           65536 kb
  coredumpsize     infinity kb
  memoryuse        infinity kb
  memorylocked     infinity kb
  maxprocesses         5547
  openfiles           11095
  sbsize           infinity bytes
  vmemoryuse       infinity kb

J?? No line like
J??   "%s number of descriptors (%d) exceeding or equaling FD_SETSIZE (%d)"
J??   "free but was in WMASK"
J??   "free but was in RMASK"
J?? in your news logs?

Hardly ever - "free:-1 20 free but was in SMASK"

J?? Well, though cp->Waker should not be NULL at that line, could you please try
J?? the following change and tell us whether the issue is still present?
J?? --- chan.c	(r?vision 9776)
J?? +++ chan.c	(copie de travail)
J?? @@ -1278,7 +1278,7 @@
J??                      FD_CLR(fd, &channels.sleep_set);
J??                      close(fd);
J??                      cp->fd = -1;
J?? -                } else {
J?? +                } else if (cp->Waker != NULL) {
J??                      cp->LastActive = Now.tv_sec;
J??                      SCHANremove(cp);
J??                      (*cp->Waker)(cp);

Thanks, Julien, I apply this patch and wait now...

Petr Novopashenniy

More information about the inn-workers mailing list