Edit report at https://bugs.php.net/bug.php?id=62730&edit=1
ID: 62730 Comment by: slangley at google dot com Reported by: slangley at google dot com Summary: mysqlnd mysqlnd_conn_methods table is mot restored correctly with mutliple init Status: Open Type: Bug Package: MySQL related Operating System: N/A PHP Version: 5.3.15 Block user comment: N Private report: N New Comment: For whatever reason I can't use "edit" as it wont accept my password - ho hum. ---- We have our own SAPI. FWIW I don't think this is an issue anymore on 5.4+ so you can close this bug. Previous Comments: ------------------------------------------------------------------------ [2013-03-08 15:08:44] and...@php.net It was never meant to restore the tables after mshutdown because after that the SAPI usually closes the process. Which SAPI do you use? Embedded? ------------------------------------------------------------------------ [2012-08-03 00:45:16] slangley at google dot com Description: ------------ If a plugin alters the connection methods table, then the original connection table is not restored if there is a php_module_shutdown()/php_module_init() cycle in the same process. This is because mysqlnd_conn_methods is a pointer to MYSQLND_CLASS_METHOD_TABLE_NAME(mysqlnd_conn), sizeof(mysqlnd_conn_methods)) so changing the values in mysqlnd_conn_methods actually changes the values in the master table. To fix, mysqlnd_conn_methods should take a copy of the table on init. Test script: --------------- Create a plugin that replaces the conenct function with a function that simply flows the call to the original callback. static enum_func_status MYSQLND_METHOD(my_test_plugin, query)(MYSQLND* conn, const char* query, unsigned int query_len TSRMLS_DC) { return original_conn_methods.query(conn, query, query_len); } Register this plugin during MINIT struct st_mysqlnd_conn_methods* current_conn_methods = mysqlnd_conn_get_methods(); memcpy(&original_conn_methods, current_conn_methods, sizeof(st_mysqlnd_conn_methods)); current_conn_methods->connect = MYSQLND_METHOD(speckle_mysqlnd_conn, connect); Start/Stop/Start the php modules php_module_startup(...) php_module_shutdown(...) php_module_startup(...) Try and connect to the mysqldb - you'll get a stack overflow. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62730&edit=1