[prev in list] [next in list] [prev in thread] [next in thread]
List: freebsd-hackers
Subject: Re: Insufficient locking in log() / kvprintf() / somewhere?
From: Tom Judge <tom () tomjudge ! com>
Date: 2007-07-20 21:44:51
Message-ID: 46A12CD3.4000600 () tomjudge ! com
[Download RAW message or body]
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
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic