summaryrefslogtreecommitdiff
path: root/ext/mysqli/mysqli_api.c
diff options
context:
space:
mode:
authorUlf Wendel <uw@php.net>2009-10-15 15:49:40 +0000
committerUlf Wendel <uw@php.net>2009-10-15 15:49:40 +0000
commitab4670ee53b8ef48e0a7f012f3bc26b2297df6c2 (patch)
treed551a3c2a674f921d986720e06786f5daba14eed /ext/mysqli/mysqli_api.c
parente4adfe4f61cb54c4da6e8144f82d6f6cc9d6e797 (diff)
downloadphp-git-ab4670ee53b8ef48e0a7f012f3bc26b2297df6c2.tar.gz
Fixing problems when calling connect (again and again) on a valid connection handle. Most of the patch comes from Andrey.
Diffstat (limited to 'ext/mysqli/mysqli_api.c')
-rw-r--r--ext/mysqli/mysqli_api.c38
1 files changed, 24 insertions, 14 deletions
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index 07bc303d72..4061d09757 100644
--- a/ext/mysqli/mysqli_api.c
+++ b/ext/mysqli/mysqli_api.c
@@ -552,22 +552,12 @@ PHP_FUNCTION(mysqli_character_set_name)
}
/* }}} */
-/* {{{ proto bool mysqli_close(object link)
- Close connection */
-PHP_FUNCTION(mysqli_close)
-{
- zval *mysql_link;
- MY_MYSQL *mysql;
-
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
- return;
- }
-
- MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED);
+/* {{{ php_mysqli_close */
+void php_mysqli_close(MY_MYSQL * mysql, int close_type TSRMLS_DC)
+{
if (!mysql->persistent) {
- mysqli_close(mysql->mysql, MYSQLI_CLOSE_EXPLICIT);
- mysql->mysql = NULL;
+ mysqli_close(mysql->mysql, close_type);
} else {
zend_rsrc_list_entry *le;
if (zend_hash_find(&EG(persistent_list), mysql->hash_key, strlen(mysql->hash_key) + 1, (void **)&le) == SUCCESS) {
@@ -580,9 +570,29 @@ PHP_FUNCTION(mysqli_close)
MyG(num_inactive_persistent)++;
}
}
+ mysql->persistent = FALSE;
}
+ mysql->mysql = NULL;
php_clear_mysql(mysql);
+}
+/* }}} */
+
+
+/* {{{ proto bool mysqli_close(object link)
+ Close connection */
+PHP_FUNCTION(mysqli_close)
+{
+ zval *mysql_link;
+ MY_MYSQL *mysql;
+
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
+ return;
+ }
+
+ MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link", MYSQLI_STATUS_INITIALIZED);
+
+ php_mysqli_close(mysql, MYSQLI_CLOSE_EXPLICIT TSRMLS_CC);
MYSQLI_CLEAR_RESOURCE(&mysql_link);
efree(mysql);