[PHP-dev 1451] Re: max_execution_time を設定すると Apache が SIGABRT で終了する

Moriyoshi Koizumi mozo @ mozo.jp
2009年 3月 16日 (月) 03:57:48 JST


小泉です。

よくよく見てみたら、apache
SAPIでは下記のマクロの中でシグナルをブロックするハンドラに飛ばしていたのですが、apache2handler
SAPIでは何もしていませんでした。なのでそれが原因のような気がします。

というわけでパッチを作成してみました。これを当てることで問題は回避されるでしょうか?

2009/3/16 Moriyoshi Koizumi <mozo @ mozo.jp>:
> 小泉です。
>
> お返事が遅くなってすみません (相変わらずです。。。)
>
> 可能であれば本家のバグ管理システムに報告していただけると助かります。
>
> http://bugs.php.net/
>
> さて、問題が発生していると思われる状況はどのようにすれば再現できますでしょうか。再現のためのコードまたは手順をご教示ください。
>
> malloc(3) 系の libc 関数は確かに非同期シグナルセーフではありませんが、emalloc() や efree() といった関数は
> libc の関数そのものではなく、PHP
> の側で用意しているアロケータです。これらの関数でも、クリティカルセクションの中でシグナルをブロックしているはず
> (HANDLE_BLOCK_INTERRUPTIONS / HANDLE_UNBLOCK_INTERUPTIONS)
> なので、そのような状況が発生するとは考えにくいです。むしろ、heap corruptionが発生しているという可能性はないですか?
>
>> そもそも、原則としてシグナルハンドラ中はアトミックな操作しか
>> 行ってはいけないはずですが、それが破られているのが原因だと考えられます。
>
> シグナルを適切にブロックしていればその限りではないと思いますが…。あまりシグナルハンドラ中であれこれやらないほうがいいのがベストプラクティスといえばその通りと思います。
>
> スマートな回避策があるとすれば、クリティカルセクションに入れるべきものが入ってない状況を回避するということになるでしょうか。
>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: php-apache2-sigblock-20090316.patch.diff
型:         text/x-patch
サイズ:     4586 バイト
説明:       無し
URL:        http://ml.php.gr.jp/pipermail/php-dev/attachments/20090316/d76b15fc/attachment.bin 


PHP-dev メーリングリストの案内