Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Jul 2007 22:44:51 +0100
From:      Tom Judge <tom@tomjudge.com>
To:        freebsd-hackers <freebsd-hackers@freebsd.org>
Subject:   Re: Insufficient locking in log() / kvprintf() / somewhere?
Message-ID:  <46A12CD3.4000600@tomjudge.com>
In-Reply-To: <20070720185009.GA79090@marvin.blogreen.org>

index | next in thread | previous in thread | raw e-mail

Romain Tartière wrote:
> Hello FreeBSD hackers!
> 
> I recently got some apache problems (maybe just forgetting to restart it
> after an update, but it is not the interest of this e-mail) and each
> httpd process was segfaulting as soon as created. I got surprising
> things like that in my systems log:
> 
> === begin snippet ===
>> pid 85055 (httpd), uid 80: exited on signal 11
>> pid 85063 (httpd), uid 80: exited on signal 11
>> pid 85064 (httpd), uid 80: exited on signal 11
>> pid 85066 (httpd), uid 80: exited on signal 11
>> pid 85065 (httpd), uid 80: exited on signal 11
>> <<66>>ppiidd  8580506678  ((hhtttptdp)d,),  uuid id8 0: 8ex0: eixteidt eod no ns isginganla l 111
>> 1
>>
>> pid 85070 (httpd), uid 80: exited on signal 11
>> pid 85069 (httpd), uid 80: exited on signal 11
> === end snippet ===
> 
> (uname: FreeBSD 6.2-STABLE #4: Thu Jun  7 00:56:26 CEST 2007  i386)
> 
> Obviously, having two processes on a dual core machine crashing
> simultaneously produce weird stuff. I poked a bit around in
> /usr/src/sys/kern:
> 
>> % grep -n 'exited on signal' *
>> kern_sig.c:2452:   "pid %d (%s), uid %d: exited on signal %d%s\n",
> 
> The code in void sigexit(td, sig) is as follow:
>>    if (kern_logsigexit)
>>      log(LOG_INFO,
>>          "pid %d (%s), uid %d: exited on signal %d%s\n",
>>          p->p_pid, p->p_comm,
>>          td->td_ucred ? td->td_ucred->cr_uid : -1,
>>          sig &~ WCOREFLAG,
>>          sig & WCOREFLAG ? " (core dumped)" : "");
> 
> The log() function is declared in /usr/src/sys/kern/subr_prf.c:229 as this:
>> void
>> log(int level, const char *fmt, ...)
>> {
>>         va_list ap;
>>         struct putchar_arg pca;
>>
>>         pca.tty = NULL;
>>         pca.pri = level;
>>         pca.flags = log_open ? TOLOG : TOCONS;
>>
>>         va_start(ap, fmt);
>>         kvprintf(fmt, putchar, &pca, 10, ap);
>>         va_end(ap);
>>
>>         msgbuftrigger = 1;
>> }
> ... so basically is calls kvprintf witch actually writes the message
> AFAIK.
> 
> The issue is maybe a weird case-corner, but maybe some kind of locking
> may have sense to avoid this?
> 
> Kind regards,
> Romain
> 
I have seen this problem a lot where certain apache server modules have 
been miss configured causing apache children to call abort and dump core 
as soon as they are spawned. (Makes for a lot of messages) I have also 
seen it produced by network drivers with large quantities of debug 
messages enabled.

Its kind of annoying to see messages interleaved like this.

Tom


home | help

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