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

Reply via email to