diff options
author | Ulf Wendel <uw@php.net> | 2009-10-15 15:49:40 +0000 |
---|---|---|
committer | Ulf Wendel <uw@php.net> | 2009-10-15 15:49:40 +0000 |
commit | ab4670ee53b8ef48e0a7f012f3bc26b2297df6c2 (patch) | |
tree | d551a3c2a674f921d986720e06786f5daba14eed /ext/mysqli/mysqli_api.c | |
parent | e4adfe4f61cb54c4da6e8144f82d6f6cc9d6e797 (diff) | |
download | php-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.c | 38 |
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); |