nnrpd dies

Julien ÉLIE julien at trigofacile.com
Tue Aug 16 10:13:38 UTC 2011

Hi David,

> Investigating further, I think this problem might be related to my
> too-long-perl_access config line from earlier this year.  I did the
> buffer size recompile change Julien suggested in
> https://lists.isc.org/pipermail/inn-workers/2011-January/017342.html and
> it looks like we're back in business.  It's a bit disturbing to me that
> nnrpd just died (and didn't error out), but I don't have the time right
> now to dwell on it.

I am glad to hear that you managed to solve the problem with the patch 
you provide a link to.  Your news server is currently up, so that's the 
most important part.

However, I am a bit unsure the two problems are the same.  I see that 
the two error messages are different.  Last time, it was a "syntax error 
in (null)(2), Expected value."
This time, it seems to be a "malloc(): memory corruption".

Maybe the Perl stack became corrupted?  It might happen because of the 
"huge" buffers you are using (which I believe is not very widespead, so 
probably not as well tested and the reason of a new kind of bug reported).

If the issue is really caused by the Perl stack, then a good news is 
that the issue is solved in INN 2.5.3 (coming up in September):

Build INN with the new "-Wunused-but-set-variable" GCC 4.6.0 warning.
It was complaining about an unused "sv" variable.

This commit fixes the following issues:
* innd and nnrpd segfaults because of a corrupted Perl stack.
A copy of the Perl stack pointer is saved at several places
in the code but not always restored the way it should be. For instance,
PerlFilter?() calls could reallocate the Perl stack and subsequently
cause failures when the stack is used afterwards.
Make sure that the Perl stack could not be modified twice in the row
without being properly updated at global scope.

macros whenever they are required.
Note that call_argv() does not need PUSHMARK-PUTBACK.

* fixed two memory leaks because of a xasprintf() which was not free'd.

* documentation of the filter_end() Perl routine that is called, if
defined, prior to the deactivation of Perl filters. Both used by innd
and nnrpd when Perl filtering is turned off (either with "ctlinnd perl
n" or when a Perl function dies at run time).

If your issue is not related to the Perl stack, then I unfortunately do 
not know the reason :-/

Julien ÉLIE

« Nul n'entre ici s'il n'est géomètre. » (Platon)

More information about the inn-workers mailing list