2008年2月20日

[PHP-users 33308] Re:zend_mm_heap corrupted の対応方法を探しております(一応解決・・・?)

睦月です。

大原さんに教えて頂いたパッチなど、色々と試しましたので結果のご報告です。

結論から先に申しますと、本質的な原因の究明には至りませんでしたが、暫定的
な対応は取れました。


<試したこと>
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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3

投稿者 xml-rpc : 2008年2月20日 18:50
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/70007
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。