[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[webdav-jp:0855] Re: [dav-dev-jp:00412] Re: OT: Apache 2.0.47 CGI bug?
吉山です。自己フォロー。
On Wed, 30 Jul 2003 13:15:29 +0900
吉山 晃 <yosshy@xxxxxxxxxxxx> wrote:
> > > 皆さんの手元の Linux では 2.0.47 で CGI が動いていますか?
> >
> > あれ、動いているな?と思ったら worker などスレッド系のもので
> > 発生しているみたいですね…
>
> 何でしょうね。Linux のスレッドの実装がまずいから…?
追っかけてみました。Linux スレッドのバグっぽいです。
apache2/srclib/apr/threadproc/unix/proc.c の apr_proc_create() の
chdir() 辺りですが、prefork の場合は、
---
close(6) = 0
close(5) = 0
close(12) = 0
close(8) = 0
close(7) = 0
close(13) = 0
close(15) = 0
dup2(14, 0) = 0
close(14) = 0
close(16) = 0
dup2(17, 1) = 1
close(17) = 0
close(18) = 0
dup2(19, 2) = 2
close(19) = 0
rt_sigaction(SIGCHLD, {SIG_DFL}, {SIG_DFL}, 8) = 0
chdir("/var/www/cgi-bin/") = 0
getpid() = 8973
getrlimit(RLIMIT_STACK, {rlim_cur=2044*1024, rlim_max=RLIM_INFINITY}) = 0
setrlimit(RLIMIT_STACK, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
rt_sigaction(SIGRTMIN, {SIG_DFL}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {SIG_DFL}, NULL, 8) = 0
rt_sigaction(SIGRT_2, {SIG_DFL}, NULL, 8) = 0
execve("/var/www/cgi-bin/printenv", ["/var/www/cgi-bin/printenv"], [/* 23 vars */]) = 0
---
となる(chdir() から下は linuxthreads の__pthread_reset_main_thread()っ
ぽい。fork() の水面下で呼ばれているのか)のに、worker の場合は
---
close(7) = 0
close(6) = 0
close(5) = 0
close(10) = 0
close(15) = 0
dup2(14, 0) = 0
close(14) = 0
close(16) = 0
dup2(17, 1) = 1
close(17) = 0
close(18) = 0
dup2(19, 2) = 2
close(19) = 0
rt_sigaction(SIGCHLD, {SIG_DFL}, {0x404176dc, ~[KILL STOP], SA_RESTORER, 0x403229c8}, 8) = 0
chdir("/var/www/cgi-bin/") = 0
write(12, "\340\373_\277\2\0\0\0\0\0\0\0T%(@\334\326_\277\224r\0@"..., 148) = 148
rt_sigprocmask(SIG_SETMASK, NULL, <unfinished ...>
<... rt_sigprocmask resumed> ~[ILL TRAP ABRT BUS FPE KILL SEGV USR2 PIPE STOP SYS 33], 8) = 0
rt_sigsuspend(~[ILL TRAP ABRT BUS FPE KILL SEGV USR2 PIPE STOP SYS RTMIN 33] <unfinished ...>
---
と、何やらよく分からん別の事をやっています。
何やらよく分かりませんが、改めて linuxthreads の暗い一面を見た気がし
ます。
---
吉山あきら<yosshy@xxxxxxxxxxxx>