tony2001 Mon Oct 2 22:09:49 2006 UTC Modified files: (Branch: PHP_5_2) /php-src NEWS /php-src/ext/pdo_mysql mysql_driver.c Log: MFH: fix #38996 (PDO_MYSQL doesn't check connections for liveness) http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.277&r2=1.2027.2.547.2.278&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.277 php-src/NEWS:1.2027.2.547.2.278 --- php-src/NEWS:1.2027.2.547.2.277 Mon Oct 2 15:34:38 2006 +++ php-src/NEWS Mon Oct 2 22:09:48 2006 @@ -11,6 +11,7 @@ - Fixed bug #39003 (__autoload() is called for type hinting). (Dmitry, Tony) - Fixed bug #39001 (ReflectionProperty returns incorrect declaring class for protected properties). (Tony) +- Fixed bug #38996 (PDO_MYSQL doesn't check connections for liveness). (Tony) - Fixed bug #38993 (Fixed safe_mode/open_basedir checks for session.save_path, allowing them to account for extra parameters). (Ilia) - Fixed bug #38981 (using FTP URLs in get_headers() causes crash). (Tony) http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_mysql/mysql_driver.c?r1=1.59.2.13&r2=1.59.2.13.2.1&diff_format=u Index: php-src/ext/pdo_mysql/mysql_driver.c diff -u php-src/ext/pdo_mysql/mysql_driver.c:1.59.2.13 php-src/ext/pdo_mysql/mysql_driver.c:1.59.2.13.2.1 --- php-src/ext/pdo_mysql/mysql_driver.c:1.59.2.13 Sun Apr 9 08:11:31 2006 +++ php-src/ext/pdo_mysql/mysql_driver.c Mon Oct 2 22:09:49 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysql_driver.c,v 1.59.2.13 2006/04/09 08:11:31 wez Exp $ */ +/* $Id: mysql_driver.c,v 1.59.2.13.2.1 2006/10/02 22:09:49 tony2001 Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -379,6 +379,34 @@ return 1; } +static int pdo_mysql_check_liveness(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */ +{ + pdo_mysql_db_handle *H = (pdo_mysql_db_handle *)dbh->driver_data; +#if MYSQL_VERSION_ID <= 32230 + void (*handler) (int); + unsigned int my_errno; +#endif + +#if MYSQL_VERSION_ID > 32230 + if (mysql_ping(H->server)) { + return FAILURE; + } +#else /* no mysql_ping() */ + handler=signal(SIGPIPE, SIG_IGN); + mysql_stat(H->server); + switch (mysql_errno(H->server)) { + case CR_SERVER_GONE_ERROR: + /* case CR_SERVER_LOST: I'm not sure this means the same as "gone" for us */ + signal(SIGPIPE, handler); + return FAILURE; + default: + break; + } + signal(SIGPIPE, handler); +#endif /* end mysql_ping() */ + return SUCCESS; +} +/* }}} */ static struct pdo_dbh_methods mysql_methods = { mysql_handle_closer, @@ -392,7 +420,7 @@ pdo_mysql_last_insert_id, pdo_mysql_fetch_error_func, pdo_mysql_get_attribute, - NULL /* check_liveness: TODO: ping */ + pdo_mysql_check_liveness }; #ifndef PDO_MYSQL_UNIX_ADDR
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php