Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Jun 2004 14:33:35 +0200 (CEST)
From:      Markus Wild <mw@kpnqwest.ch>
To:        freebsd-current@freebsd.org
Subject:   Problem with syslogd
Message-ID:  <200406011233.i51CXZeo037506@smsgw.vianetworks.ch>

next in thread | raw e-mail | index | archive | help
Hi there,

I'm frequently seeing a problem with syslogd aborting, with a 
gdb trace indicating it's trying to free() content out of the
reapchild() function, with the signal having interrupted another
malloc/free type function call. I was able to keep the effects of
this in bay by blocking SIGCHLD in logmsg() and validate(), but
I might not have caught all possible cases yet. Looking at
the code, is it such a great idea to call a non-reentrant 
allocation function (free()) from a signal handler? reapchild()
calls deadq_remove(), which by itself calls free(). IMHO this
should be moved out of the signal handler, or am I missing something?

If you want to provoke the bug, have a "|" command in your syslog.conf
with a command that frequently terminates, and feed it a lot of 
messages....

Cheers,
Markus



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200406011233.i51CXZeo037506>