This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]