thread-unsafe syslog code in libc?

John Polstra jdp at polstra.com
Sun Aug 15 14:12:27 PDT 2004


On 15-Aug-2004 Robert Watson wrote:
> On Sun, 15 Aug 2004, John Polstra wrote:
> 
>> The above is only to handle an unusual error case. 
>> 
>> There is some thread-unsafeness here, but it doesn't look like it would
>> matter under normal conditions. 
> 
> So maybe we're dealing with a user space race where multiple threads
> attempt to do a first syslog in parallel?

Probably not that.  You said it was a simultaneous connect() and
close(), right?  The close is only done in disconnectlog() and
closelog().  The former is only called in unusual error cases, and
the latter is called by applications.  So I guess one culprit could
be a first syslog call in one thread and a closelog call in another
thread.

Or, maybe the system ran out of mbufs and the send() did fail, causing
disconnectlog to be used and exercising the race.  An out of mbufs
condition might also contribute to the kernel panic you mentioned.

John


More information about the freebsd-threads mailing list