Edit report at https://bugs.php.net/bug.php?id=64722&edit=1

 ID:                 64722
 Comment by:         tj dot botha at plista dot com
 Reported by:        tj dot botha at plista dot com
 Summary:            PDO extension causes zend_mm_heap corrupted
 Status:             Feedback
 Type:               Bug
 Package:            PDO related
 Operating System:   Ubuntu Server 12.10
 PHP Version:        master-Git-2013-04-26 (Git)
 Block user comment: N
 Private report:     N

 New Comment:

That is an old backtrace - here is the newest:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffd8fe9700 (LWP 31920)]
0x00007fffeb6a5722 in zval_delref_p (pz=0x5a5a5a5a5a5a5a5a) at /home/tj/php-
5.4.14/Zend/zend.h:395
395             return --pz->refcount__gc;
(gdb) backtrace 
#0  0x00007fffeb6a5722 in zval_delref_p (pz=0x5a5a5a5a5a5a5a5a) at /home/tj/php-
5.4.14/Zend/zend.h:395
#1  0x00007fffeb6a7d06 in _zval_ptr_dtor (zval_ptr=0x7fffd6d39378, 
__zend_filename=0x7fffebb88468 "/home/tj/php-5.4.14/Zend/zend_objects.c", 
__zend_lineno=54)
    at /home/tj/php-5.4.14/Zend/zend_execute_API.c:432
#2  0x00007fffeb6f258a in zend_object_std_dtor (object=0x7fffd00f56c0, 
tsrm_ls=0x7fffd0017170) at /home/tj/php-5.4.14/Zend/zend_objects.c:54
#3  0x00007fffeb3e0056 in pdo_dbh_free_storage (dbh=0x7fffd00f56c0, 
tsrm_ls=0x7fffd0017170) at /home/tj/php-5.4.14/ext/pdo/pdo_dbh.c:1577
#4  0x00007fffeb6fac18 in zend_objects_store_del_ref_by_handle_ex (handle=122, 
handlers=0x7fffebeb8a20 <pdo_dbh_object_handlers>, tsrm_ls=0x7fffd0017170)
    at /home/tj/php-5.4.14/Zend/zend_objects_API.c:221
#5  0x00007fffeb6fa759 in zend_objects_store_del_ref (zobject=0x7fffd6d240e0, 
tsrm_ls=0x7fffd0017170) at /home/tj/php-5.4.14/Zend/zend_objects_API.c:173
#6  0x00007fffeb6baacd in _zval_dtor_func (zvalue=0x7fffd6d240e0, 
__zend_filename=0x7fffebb83be8 "/home/tj/php-5.4.14/Zend/zend_execute_API.c", 
__zend_lineno=438)
    at /home/tj/php-5.4.14/Zend/zend_variables.c:54
#7  0x00007fffeb6a58c1 in _zval_dtor (zvalue=0x7fffd6d240e0, 
__zend_filename=0x7fffebb83be8 "/home/tj/php-5.4.14/Zend/zend_execute_API.c", 
__zend_lineno=438)
    at /home/tj/php-5.4.14/Zend/zend_variables.h:35
#8  0x00007fffeb6a7da9 in _zval_ptr_dtor (zval_ptr=0x7fffd6bee268, 
__zend_filename=0x7fffebb84cb0 "/home/tj/php-5.4.14/Zend/zend_variables.c", 
__zend_lineno=182)
    at /home/tj/php-5.4.14/Zend/zend_execute_API.c:438
#9  0x00007fffeb6baef5 in _zval_ptr_dtor_wrapper (zval_ptr=0x7fffd6bee268) at 
/home/tj/php-5.4.14/Zend/zend_variables.c:182
#10 0x00007fffeb6d3281 in zend_hash_destroy (ht=0x7fffd6d39768) at /home/tj/php-
5.4.14/Zend/zend_hash.c:560
#11 0x00007fffeb6baa76 in _zval_dtor_func (zvalue=0x7fffd7d18be8, 
__zend_filename=0x7fffebb83be8 "/home/tj/php-5.4.14/Zend/zend_execute_API.c", 
__zend_lineno=438)
    at /home/tj/php-5.4.14/Zend/zend_variables.c:45
#12 0x00007fffeb6a58c1 in _zval_dtor (zvalue=0x7fffd7d18be8, 
__zend_filename=0x7fffebb83be8 "/home/tj/php-5.4.14/Zend/zend_execute_API.c", 
__zend_lineno=438)
    at /home/tj/php-5.4.14/Zend/zend_variables.h:35
#13 0x00007fffeb6a7da9 in _zval_ptr_dtor (zval_ptr=0x7fffd7d18d98, 
__zend_filename=0x7fffebb84228 "/home/tj/php-5.4.14/Zend/zend_opcode.c", 
__zend_lineno=165)
    at /home/tj/php-5.4.14/Zend/zend_execute_API.c:438
#14 0x00007fffeb6aef6a in cleanup_user_class_data (ce=0x7fffd7d185d0, 
tsrm_ls=0x7fffd0017170) at /home/tj/php-5.4.14/Zend/zend_opcode.c:165
#15 0x00007fffeb6af1c8 in zend_cleanup_user_class_data (pce=0x7fffd00d6ad8, 
tsrm_ls=0x7fffd0017170) at /home/tj/php-5.4.14/Zend/zend_opcode.c:198
#16 0x00007fffeb6d3ce3 in zend_hash_reverse_apply (ht=0x7fffd001a770, 
apply_func=0x7fffeb6af194 <zend_cleanup_user_class_data>, 
tsrm_ls=0x7fffd0017170)
    at /home/tj/php-5.4.14/Zend/zend_hash.c:799
#17 0x00007fffeb6a71e8 in shutdown_executor (tsrm_ls=0x7fffd0017170) at 
/home/tj/php-5.4.14/Zend/zend_execute_API.c:289
#18 0x00007fffeb6be217 in zend_deactivate (tsrm_ls=0x7fffd0017170) at 
/home/tj/php-5.4.14/Zend/zend.c:938
#19 0x00007fffeb601c90 in php_request_shutdown (dummy=0x0) at /home/tj/php-
5.4.14/main/main.c:1800
#20 0x00007fffeb777c6d in php_apache_request_dtor (r=0x7fffd000f068, 
tsrm_ls=0x7fffd0017170) at /home/tj/php-
5.4.14/sapi/apache2handler/sapi_apache2.c:507
#21 0x00007fffeb7787cf in php_handler (r=0x7fffd000f068) at /home/tj/php-
5.4.14/sapi/apache2handler/sapi_apache2.c:679
#22 0x0000000000447e40 in ap_run_handler (r=0x7fffd000f068) at config.c:169
#23 0x000000000044827b in ap_invoke_handler (r=r@entry=0x7fffd000f068) at 
config.c:432
#24 0x000000000045b1bc in ap_internal_redirect (new_uri=<optimised out>, r=
<optimised out>) at http_request.c:644
#25 0x00007fffebed6658 in handler_redirect (r=0x7fffd0002970) at 
mod_rewrite.c:5051
#26 0x0000000000447e40 in ap_run_handler (r=0x7fffd0002970) at config.c:169
#27 0x000000000044827b in ap_invoke_handler (r=r@entry=0x7fffd0002970) at 
config.c:432
#28 0x000000000045bc5a in ap_process_async_request (r=0x7fffd0002970) at 
http_request.c:317
#29 0x0000000000458b27 in ap_process_http_async_connection (c=0x7fffe4037410) 
at 
http_core.c:143
#30 ap_process_http_connection (c=0x7fffe4037410) at http_core.c:228
#31 0x0000000000450ff0 in ap_run_process_connection (c=0x7fffe4037410) at 
connection.c:41
#32 0x000000000046284a in process_socket (my_thread_num=24, my_child_num=0, 
cs=0x7fffe4037398, sock=0x7fffe4037190, p=0x7fffe4037118, thd=0x6bf770) at 
event.c:964
#33 worker_thread (thd=0x6bf770, dummy=<optimised out>) at event.c:1812
#34 0x00007ffff7531e9a in start_thread () from /lib/x86_64-linux-
gnu/libpthread.so.0
#35 0x00007ffff725ecbd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#36 0x0000000000000000 in ?? ()

The project relies heavily on PDO and runs okay on PHP 5.3.24.


Previous Comments:
------------------------------------------------------------------------
[2013-04-30 14:50:35] johan...@php.net

I can't reproduce this on my machine.

Apparently your PHP is not compiled in threaded mode (no tsrm_ls parameters in 
the stacktrace) so I assume you're not in threaded mode, so no race conditions.

Can you share more details on your setup and code?

------------------------------------------------------------------------
[2013-04-30 14:44:16] tj dot botha at plista dot com

I just want to emphasize - that commenting out the code not a solution - since 
it 
causes errors later down the line.  Also, when stepping / breaking at problem 
area through the code - the project starts loading in bits and pieces, no 
segfaults occur.  Only when left to run without breakpoints does it crash - 
therefor this really does seem like a concurrency problem.

------------------------------------------------------------------------
[2013-04-30 12:45:41] tj dot botha at plista dot com

This appears to be a race condition - so I am unable to reproduce.  I am 
however 
able to make the problem go away by modifying pdo_dbh.c to the following:

static void pdo_dbh_free_storage(pdo_dbh_t *dbh TSRMLS_DC)
{
        if (dbh->in_txn && dbh->methods && dbh->methods->rollback) {
                dbh->methods->rollback(dbh TSRMLS_CC);
                dbh->in_txn = 0;
        }
        
        if (dbh->is_persistent && dbh->methods && dbh->methods-
>persistent_shutdown) {
                dbh->methods->persistent_shutdown(dbh TSRMLS_CC);
        }
        //uncomment below to cause zend_mm_heap corrupted
        //zend_object_std_dtor(&dbh->std TSRMLS_CC);
        //dbh->std.properties = NULL;
        dbh_free(dbh TSRMLS_CC);
}

If I recompile this into PHP it works - however now there is most likely a 
memory leak.  I checked and this code is also new from PHP 5.3.  So definitely 
it is causing the fault.

Don't know what the real solution is though.

TJ

------------------------------------------------------------------------
[2013-04-26 17:53:01] s...@php.net

Do you have a reproducible testcase?

------------------------------------------------------------------------
[2013-04-26 14:48:58] tj dot botha at plista dot com

Description:
------------
I have a project which uses MySQL PDO.  I Compiled PHP versions 5.4.6, PHP 
5.4.14 and PHP 5.6 (from current GIT repositoty - 26 April 2013).

I have various configuration options, but everytime I my configure command 
includes --with-pdo-mysql=mysqlnd, I am unable to run my project.

The ONLY log file which shows any kind of information is Apache error.log:

zend_mm_heap corrupted

When I remove --with-pdo-mysql from configure, then my project works okay 
(however all my PDO functions are of course missing) and I just get normal 
expected PHP errors.

However.  When I compile PHP version 5.3.24, it works.  I can successfully 
include --with-pdo-mysql=mysqlnd, and my project loads without problems.



Test script:
---------------
I do not have a test script - as I have no indication as to where the app fails

Actual result:
--------------
#0  0x00000000008ee2c2 in zval_delref_p (pz=0x5a5a5a5a5a5a5a5a) at /home/tj/php-
latest/Zend/zend.h:409
#1  0x00000000008ee51f in i_zval_ptr_dtor (zval_ptr=0x5a5a5a5a5a5a5a5a, 
__zend_filename=0xe38408 "/home/tj/php-latest/Zend/zend_objects.c", 
__zend_lineno=54)
    at /home/tj/php-latest/Zend/zend_execute.h:76
#2  0x00000000008ef896 in _zval_ptr_dtor (zval_ptr=0x7f88d6068a20, 
__zend_filename=0xe38408 "/home/tj/php-latest/Zend/zend_objects.c", 
__zend_lineno=54)
    at /home/tj/php-latest/Zend/zend_execute_API.c:428
#3  0x00000000009354de in zend_object_std_dtor (object=0x271b880) at 
/home/tj/php-latest/Zend/zend_objects.c:54
#4  0x000000000068aad0 in pdo_dbh_free_storage (dbh=0x271b880) at /home/tj/php-
latest/ext/pdo/pdo_dbh.c:1576
#5  0x000000000093c9ad in zend_objects_store_del_ref_by_handle_ex (handle=140, 
handlers=0x116c2e0 <pdo_dbh_object_handlers>)
    at /home/tj/php-latest/Zend/zend_objects_API.c:221
#6  0x000000000093c6b3 in zend_objects_store_del_ref (zobject=0x7f88d60a4af8) 
at 
/home/tj/php-latest/Zend/zend_objects_API.c:173
#7  0x0000000000901b6c in _zval_dtor_func (zvalue=0x7f88d60a4af8, 
__zend_filename=0xe335f8 "/home/tj/php-latest/Zend/zend_execute.h", 
__zend_lineno=81)
    at /home/tj/php-latest/Zend/zend_variables.c:54
#8  0x00000000008ee4c1 in _zval_dtor (zvalue=0x7f88d60a4af8, 
__zend_filename=0xe335f8 "/home/tj/php-latest/Zend/zend_execute.h", 
__zend_lineno=81)
    at /home/tj/php-latest/Zend/zend_variables.h:35
#9  0x00000000008ee58c in i_zval_ptr_dtor (zval_ptr=0x7f88d60a4af8, 
__zend_filename=0xe34970 "/home/tj/php-latest/Zend/zend_variables.c", 
__zend_lineno=182)
    at /home/tj/php-latest/Zend/zend_execute.h:81
#10 0x00000000008ef896 in _zval_ptr_dtor (zval_ptr=0x7f88d6030b28, 
__zend_filename=0xe34970 "/home/tj/php-latest/Zend/zend_variables.c", 
__zend_lineno=182)
    at /home/tj/php-latest/Zend/zend_execute_API.c:428
#11 0x0000000000901f7b in _zval_ptr_dtor_wrapper (zval_ptr=0x7f88d6030b28) at 
/home/tj/php-latest/Zend/zend_variables.c:182
#12 0x00000000009174a7 in zend_hash_destroy (ht=0x7f88d6069138) at /home/tj/php-
latest/Zend/zend_hash.c:560
#13 0x0000000000901b2f in _zval_dtor_func (zvalue=0x7f88d6b1ece8, 
__zend_filename=0xe335f8 "/home/tj/php-latest/Zend/zend_execute.h", 
__zend_lineno=81)
    at /home/tj/php-latest/Zend/zend_variables.c:45
#14 0x00000000008ee4c1 in _zval_dtor (zvalue=0x7f88d6b1ece8, 
__zend_filename=0xe335f8 "/home/tj/php-latest/Zend/zend_execute.h", 
__zend_lineno=81)
    at /home/tj/php-latest/Zend/zend_variables.h:35
#15 0x00000000008ee58c in i_zval_ptr_dtor (zval_ptr=0x7f88d6b1ece8, 
__zend_filename=0xe33d68 "/home/tj/php-latest/Zend/zend_opcode.c", 
__zend_lineno=169)
    at /home/tj/php-latest/Zend/zend_execute.h:81
#16 0x00000000008ef896 in _zval_ptr_dtor (zval_ptr=0x7f88d6b1ef20, 
__zend_filename=0xe33d68 "/home/tj/php-latest/Zend/zend_opcode.c", 
__zend_lineno=169)
    at /home/tj/php-latest/Zend/zend_execute_API.c:428
---Type <return> to continue, or q <return> to quit---
#17 0x00000000008f562e in cleanup_user_class_data (ce=0x7f88d6b1e528) at 
/home/tj/php-latest/Zend/zend_opcode.c:169
#18 0x00000000008f5757 in zend_cleanup_user_class_data (pce=0x26d28e8) at 
/home/tj/php-latest/Zend/zend_opcode.c:202
#19 0x0000000000917ee7 in zend_hash_reverse_apply (ht=0x25016b0, 
apply_func=0x8f572e <zend_cleanup_user_class_data>) at /home/tj/php-
latest/Zend/zend_hash.c:799
#20 0x00000000008ef301 in shutdown_executor () at /home/tj/php-
latest/Zend/zend_execute_API.c:289
#21 0x000000000090411e in zend_deactivate () at /home/tj/php-
latest/Zend/zend.c:939
#22 0x000000000086c2b5 in php_request_shutdown (dummy=0x0) at /home/tj/php-
latest/main/main.c:1800
#23 0x00000000009b42f8 in do_cli (argc=2, argv=0x2500a40) at /home/tj/php-
latest/sapi/cli/php_cli.c:1176
#24 0x00000000009b4b8d in main (argc=2, argv=0x2500a40) at /home/tj/php-
latest/sapi/cli/php_cli.c:1377



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=64722&edit=1

Reply via email to