summaryrefslogtreecommitdiff
path: root/ext/mysql/php_mysql.c
diff options
context:
space:
mode:
authorGeorg Richter <georg@php.net>2002-07-21 22:19:51 +0000
committerGeorg Richter <georg@php.net>2002-07-21 22:19:51 +0000
commit27c282d34a2d09d31d3804b849444904ca498d0e (patch)
treed820f1e871357271f60fc8990ac327f7cdd6b1e7 /ext/mysql/php_mysql.c
parent4d99f3e4e37b5daa88bb127d6f0de8ea7ea86ab3 (diff)
downloadphp-git-27c282d34a2d09d31d3804b849444904ca498d0e.tar.gz
Automatic rollback for non committed transactions
Diffstat (limited to 'ext/mysql/php_mysql.c')
-rw-r--r--ext/mysql/php_mysql.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c
index eb3a96ebdd..039c87f9c9 100644
--- a/ext/mysql/php_mysql.c
+++ b/ext/mysql/php_mysql.c
@@ -215,6 +215,26 @@ ZEND_GET_MODULE(mysql)
void timeout(int sig);
#define CHECK_LINK(link) { if (link==-1) { php_error(E_WARNING, "MySQL: A link to the server could not be established"); RETURN_FALSE; } }
+/* {{{ _rollback_mysql_transactions
+ */
+static int _rollback_mysql_transactions(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+{
+ php_mysql_conn *link;
+ char query[128];
+
+ /* check if its a persistent link */
+ if (Z_TYPE_P(rsrc) != le_plink)
+ return 0;
+
+ link = (php_mysql_conn *) rsrc->ptr;
+
+ /* rollback possible transactions */
+ strcpy (query, "ROLLBACK");
+ mysql_real_query(&link->conn, query, strlen(query));
+
+ return 0;
+}
+/* }}} */
/* {{{ _free_mysql_result
* This wrapper is required since mysql_free_result() returns an integer, and
@@ -385,6 +405,8 @@ PHP_RINIT_FUNCTION(mysql)
*/
PHP_RSHUTDOWN_FUNCTION(mysql)
{
+ zend_hash_apply(&EG(persistent_list), (apply_func_t) _rollback_mysql_transactions TSRMLS_CC);
+
if (MySG(connect_error)!=NULL) {
efree(MySG(connect_error));
}