Ticket #1658 (closed バグ指摘: 修正済)

Opened 8 years ago

Last modified 7 years ago

SC_Query の各種メソッドでプレースホルダの数に誤りがあるとメモリリークが発生する

Reported by: Seasoft Owned by: Seasoft
Priority: Milestone: EC-CUBE2.13.0
Component: その他 Version: 2.12.0 α
Keywords: Cc:
修正済み: yes

Description (last modified by Seasoft) (diff)

メモリリークが発生しない例

        $objQuery =& SC_Query_Ex::getSingletonInstance();
        for ($i = 1; $i <= 10000; $i++) {
            $objQuery->query('SELECT CAST(? as int)', array(0));
        }

メモリリークが発生する例

        $objQuery =& SC_Query_Ex::getSingletonInstance();
        for ($i = 1; $i <= 10000; $i++) {
            $objQuery->query('SELECT CAST(? as int)', array(0, 0)); // XXX
        }

なお、#1657 を解決できれば、本件は対応が不要となりそう。

下記だと、GC が動作しているような動きが見られる。GC が動作しないパターンがあるのか、GC に不具合があるのかまでは特定できていない。

        for ($i = 1; $i <= 20000; $i++) {
            $objQuery->select('? = ?', '', '', array('1', '1', '1'));
        }

r23019 やや強引な実装だが、memory_limit = 2M の環境で、10000 回のループを実行できたので、とりあえず大幅に改善したと考える。

Change History

comment:1 Changed 8 years ago by Seasoft

  • Summary changed from SC_Query の各種メソッドでプレースホルダの数に誤りがあるとメモリーリークが発生する to SC_Query の各種メソッドでプレースホルダの数に誤りがあるとメモリリークが発生する

comment:2 Changed 8 years ago by Seasoft

  • Description modified (diff)

comment:3 Changed 8 years ago by Seasoft

  • Description modified (diff)

comment:4 Changed 8 years ago by adachi

  • Milestone changed from EC-CUBE2.12.2 to EC-CUBE 2.12.3

comment:5 Changed 8 years ago by kim

  • Milestone changed from EC-CUBE2.12.3 to EC-CUBE2.12.4

comment:6 Changed 7 years ago by Seasoft

  • Owner changed from somebody to Seasoft
  • 修正済み set
  • Status changed from new to assigned
  • Description modified (diff)

comment:7 Changed 7 years ago by h_yoshimoto

  • Status changed from assigned to closed
  • Resolution set to 修正済

ご対応ありがとうございました。
こちらクローズさせていただきます。

Note: See TracTickets for help on using tickets.