[PHP-users 14372] OCIFreeStatementでSegmentation fault

Shuichi Ishikawa php-users@php.gr.jp
2003年 3月 28日 (金) 11:22:32 JST


石川ともうします。

PHP4.3.1 (DSO) + Apache1.3.27 + Oracle8.1.7
という環境において、Oracle関数の呼び出しでApacheが落ちて困っています。

Oracleに接続し、
        for( $i=0; $i<$num_child; $i++ )
        {
            (中略)
            $stmt = OCIParse( $con, $query );
            if(OCIExecute( $stmt )) {
                if( OCIFetchInto( $stmt, &$result, OCI_ASSOC ) ) {
                    (中略)
                }
            }
            OCIFreeStatement($stmt);
        }
というループを3回まわしたところのOCIFreeStatementをしようとしたところで、
Apacheのプロセスが落ちます。
ためしにループを2回でとめると($num_child=2)、
2回分の各$resultは問題なくとれており、何事もなく正常に終了します。

この時、Apacheのerror_logには、
  [notice] child pid 32168 exit signal Segmentation fault (11)
と出力されます。

# gdb httpd
として、backtraceを見ますと、次のようになっております。

0x406d21f4 in kghalp () from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
(gdb) bt
#0  0x406d21f4 in kghalp ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#1  0x406dfc68 in kgebem ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#2  0x406e131e in kgedes ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#3  0x4041513f in skgudmp ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#4  0x406de0fc in kgesiv ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#5  0x406ddef8 in kgesic1 ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#6  0x406cd49a in kgherror ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#7  0x406d379f in kghfre ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#8  0x40387272 in kpuhhfre ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#9  0x40391d5f in kpufhndl ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#10 0x403c0aa7 in OCIHandleFree ()
   from /home/oracle/product/8.1.7/lib/libclntsh.so.8.0
#11 0x40102e11 in _oci_stmt_list_dtor (rsrc=0x81599ec)
    at /usr/local/src/php-4.3.1/ext/oci8/oci8.c:758
#12 0x401fb55b in list_entry_destructor (ptr=0x81599ec)
    at /usr/local/src/php-4.3.1/Zend/zend_list.c:177
#13 0x401f92f9 in zend_hash_del_key_or_index (ht=0x402721c8, arKey=0x0, nKeyLength=0, h=33, flag=1)
    at /usr/local/src/php-4.3.1/Zend/zend_hash.c:514
#14 0x401fb23e in _zend_list_delete (id=33)
    at /usr/local/src/php-4.3.1/Zend/zend_list.c:56
#15 0x4010bcd9 in zif_ocifreestatement (ht=1, return_value=0x8183854, this_ptr=0x0, return_value_used=0)
    at /usr/local/src/php-4.3.1/ext/oci8/oci8.c:4156
#16 0x4020681f in execute (op_array=0x8135130)
    at /usr/local/src/php-4.3.1/Zend/zend_execute.c:1596
#17 0x40206a52 in execute (op_array=0x8134e14)
    at /usr/local/src/php-4.3.1/Zend/zend_execute.c:1640
#18 0x401f39a8 in zend_execute_scripts (type=8, retval=0x0, file_count=3)
    at /usr/local/src/php-4.3.1/Zend/zend.c:864
#19 0x401bb6ec in php_execute_script (primary_file=0xbffff690)
    at /usr/local/src/php-4.3.1/main/main.c:1573
#20 0x4020b7fe in apache_php_module_main (r=0x8121c4c, display_source_mode=0)
    at /usr/local/src/php-4.3.1/sapi/apache/sapi_apache.c:55
#21 0x4020c6e8 in send_php (r=0x8121c4c, display_source_mode=0,
    filename=0x81228fc "/usr/local/apache/htdocs/admin_tool/event/sanka_info/list.php") at /usr/local/src/php-4.3.1/sapi/apache/mod_php4.c:556
#22 0x4020c755 in send_parsed_php (r=0x8121c4c)
    at /usr/local/src/php-4.3.1/sapi/apache/mod_php4.c:571
#23 0x0806a7eb in ap_invoke_handler ()
#24 0x0807f76f in process_request_internal ()
#25 0x0807f7d0 in ap_process_request ()
#26 0x0807660d in child_main ()
#27 0x080767b8 in make_child ()
#28 0x0807692c in startup_children ()
#29 0x08076fa4 in standalone_main ()
#30 0x08077807 in main ()
#31 0x42017499 in __libc_start_main () from /lib/i686/libc.so.6


このPHPのconfigureオプションは次の通りです。

  --with-apxs=/usr/local/apache/bin/apxs \
  --enable-mbstring \
  --enable-mbregex \
  --with-oci8=/home/oracle/product/8.1.7 \
  --enable-sigchild \
  --enable-zend-multibyte \
  --without-mysql \
  --enable-debug

httpd.confでは次のような設定をしております。

    php_flag magic_quotes_gpc off
    php_flag output_buffering On
    php_value output_handler mb_output_handler
    php_value default_charset Shift_JIS

    php_value mbstring.language Japanese
    php_flag mbstring.encoding_translation On

    php_value mbstring.http_input auto
    php_value mbstring.http_output SJIS
    php_value mbstring.internal_encoding EUC-JP
    php_value mbstring.substitute_character none
    php_value mbstring.script_encoding auto

    php_value error_reporting E_ALL


何か、お気づきの点がありましたらお知らせいただければ幸いです。

--
Shuichi Ishikawa   n|a




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