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:
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.
Previous Comments:
------------------------------------------------------------------------
[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] [email protected]
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