This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: fork() and syslog() locks each other. How to avoid?
On Sat, Sep 23, 2006 at 07:23:07PM +0400, Peter Volkov (pva) wrote:
> On ??????, 2006-09-23 at 10:05 -0400, Daniel Jacobowitz wrote:
> > On Sat, Sep 23, 2006 at 06:00:13PM +0400, Peter Volkov (pva) wrote:
> > > I did not checked but seems that fork function takes mutex which syslog
> > > will waits for it. If I'm right then the question is what is the right
> > > way to avoid such situations but to keep program behavior?
> >
> > Avoid calling syslog from a signal handler. Take a look at POSIX, and
> > you'll find a list of which C library functions are required to be safe
> > when called from signal handlers - and syslog is not on it.
>
> Thank you very much for your answer! It points me to the right
> direction. Both syslog() and fork() is non-reentrant functions so if I
Wrong. fork() is async-signal-safe, only syslog is not.
See
http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html#tag_02_04_03
> really want to use syslog from signal handler I have to wrap all
> non-reentrant functions with futex's or may be use some global variable
> to avoid simultaneous calls to this functions.
That won't help you.
> Or better to follow your suggestion and avoid syslog() in handler.
Definitely.
Jakub