]> granicus.if.org Git - php/commitdiff
MFB: Fixed bug #41350 (my_thread_global_end() error during request shutdown on Windows).
authorScott MacVicar <scottmac@php.net>
Mon, 25 Jun 2007 20:19:30 +0000 (20:19 +0000)
committerScott MacVicar <scottmac@php.net>
Mon, 25 Jun 2007 20:19:30 +0000 (20:19 +0000)
ext/mysql/php_mysql.c
ext/mysqli/mysqli.c

index 4c6309f4447cde89fc54e4db47e06c8d9d545992..d3ae44de48261b7db52965babe8ee4a5ccfa41d3 100644 (file)
@@ -395,6 +395,10 @@ ZEND_MODULE_STARTUP_D(mysql)
        REGISTER_LONG_CONSTANT("MYSQL_CLIENT_INTERACTIVE", CLIENT_INTERACTIVE, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQL_CLIENT_IGNORE_SPACE", CLIENT_IGNORE_SPACE, CONST_CS | CONST_PERSISTENT); 
 
+       if (mysql_server_init(0, NULL, NULL)) {
+               return FAILURE;
+       }
+
        return SUCCESS;
 }
 /* }}} */
@@ -403,6 +407,16 @@ ZEND_MODULE_STARTUP_D(mysql)
  */
 PHP_MSHUTDOWN_FUNCTION(mysql)
 {
+#ifdef PHP_WIN32
+       unsigned long client_ver = mysql_get_client_version;
+       /* Can't call mysql_server_end() multiple times prior to 5.0.42 on Windows */
+       if ((client_ver > 50042 && client_ver < 50100) || client_ver > 50122) {
+               mysql_server_end();
+       }
+#else
+       mysql_server_end();
+#endif
+
        UNREGISTER_INI_ENTRIES();
        return SUCCESS;
 }
@@ -412,6 +426,11 @@ PHP_MSHUTDOWN_FUNCTION(mysql)
  */
 PHP_RINIT_FUNCTION(mysql)
 {
+#ifdef ZTS
+       if (mysql_thread_init()) {
+               return FAILURE;
+       }
+#endif
        MySG(default_link)=-1;
        MySG(num_links) = MySG(num_persistent);
        /* Reset connect error/errno on every request */
@@ -426,6 +445,9 @@ PHP_RINIT_FUNCTION(mysql)
  */
 PHP_RSHUTDOWN_FUNCTION(mysql)
 {
+#ifdef ZTS
+       mysql_thread_end();
+#endif
        if (MySG(trace_mode)) {
                if (MySG(result_allocated)){
                        php_error_docref("function.mysql-free-result" TSRMLS_CC, E_WARNING, "%lu result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query()", MySG(result_allocated));
index 43834c8ec62ff3aca40854d4c2fde724e36e0fa8..cb3de3388af702a3901843b221a807fde55ae9e2 100644 (file)
@@ -662,6 +662,10 @@ PHP_MINIT_FUNCTION(mysqli)
        REGISTER_LONG_CONSTANT("MYSQLI_REPORT_ALL", MYSQLI_REPORT_ALL, CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("MYSQLI_REPORT_OFF", 0, CONST_CS | CONST_PERSISTENT);
 
+       if (mysql_server_init(0, NULL, NULL)) {
+               return FAILURE;
+       }
+
        return SUCCESS;
 }
 /* }}} */
@@ -670,6 +674,16 @@ PHP_MINIT_FUNCTION(mysqli)
  */
 PHP_MSHUTDOWN_FUNCTION(mysqli)
 {
+#ifdef PHP_WIN32
+       unsigned long client_ver = mysql_get_client_version;
+       /* Can't call mysql_server_end() multiple times prior to 5.0.42 on Windows */
+       if ((client_ver > 50042 && client_ver < 50100) || client_ver > 50122) {
+               mysql_server_end();
+       }
+#else
+       mysql_server_end();
+#endif
+
        zend_hash_destroy(&mysqli_driver_properties);
        zend_hash_destroy(&mysqli_result_properties);
        zend_hash_destroy(&mysqli_stmt_properties);
@@ -686,6 +700,11 @@ PHP_MSHUTDOWN_FUNCTION(mysqli)
  */
 PHP_RINIT_FUNCTION(mysqli)
 {
+#ifdef ZTS
+       if (mysql_thread_init()) {
+               return FAILURE;
+       }
+#endif
        MyG(error_msg) = NULL;
        MyG(error_no) = 0;
 
@@ -697,6 +716,9 @@ PHP_RINIT_FUNCTION(mysqli)
  */
 PHP_RSHUTDOWN_FUNCTION(mysqli)
 {
+#ifdef ZTS
+       mysql_thread_end();
+#endif
        if (MyG(error_msg)) {
                efree(MyG(error_msg));
        }