[PHP-users 33308] Re: zend_mm_heap corrupted の対応方法を探しております(一応解決・・・?)
睦月
mutsuki @ mf.point.ne.jp
2008年 2月 20日 (水) 18:50:22 JST
睦月です。
大原さんに教えて頂いたパッチなど、色々と試しましたので結果のご報告です。
結論から先に申しますと、本質的な原因の究明には至りませんでしたが、暫定的
な対応は取れました。
<試したこと>
1. 前回紹介して頂いたパッチを適用。
> http://www.webhostingtalk.com/showthread.php?t=661186
> http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.c?r1=1.202.2.7.2.15&r2=1.202.2.7.2.16&pathrev=PHP_5_2&diff_format=u
2. 5.2.6 を CVS から取ってくる。
3. --enable-debug 付きで PHP をコンパイルし、memory leak の発生状況を
調査し、PHPのソースを追っかける。
<結果>
1. × 現象変わらず。
2. × autoconf などの環境を準備できないため、諦める。
3. △ 一応原因と思われるコードの特定ができ、現象が発生していた部分につ
いては解決。
3. で特定した原因ですが、Ethna から呼び出している PEAR.php の raiseError
関数の、エラーオブジェクトのインスタンス生成部でした。
使用していた PEAR.php が 1.4.9 と古いのですが、一応原因箇所を残しておき
ます。
PEAR::raiseError 内でエラークラスのインスタンスを生成する際に &new を使
用しないように直したのみとなります。
--- PEAR.php Wed Feb 20 14:24:30 2008
+++ PEAR.php Wed Feb 20 17:40:30 2008
@@ -560,10 +560,10 @@
$ec = 'PEAR_Error';
}
if ($skipmsg) {
- $a = &new $ec($code, $mode, $options, $userinfo);
+ $a = new $ec($code, $mode, $options, $userinfo);
return $a;
} else {
- $a = &new $ec($message, $code, $mode, $options, $userinfo);
+ $a = new $ec($message, $code, $mode, $options, $userinfo);
return $a;
}
}
(尚、PEAR.php 1.7.1 にて同様の対応が取られていた為、結局上記パッチはあ
てず、最新の PEAR に入れ替えて使用しています。)
こういった内容の切り分けの為にも E_STRICT を有効にしたいのですが、そのた
めにはまず Ethna と Pear から Strict メッセージを排除しないとならないた
め、対応していませんでした。
残念ながら日程的に E_STRICT 対応は見送るしかなさそうです。
以上、わかりづらい文章で申し訳ないのですが、ご報告まで。
--
睦月
PHP-users メーリングリストの案内