[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>