]> granicus.if.org Git - php/commitdiff
Automatic rollback for non committed transactions
authorGeorg Richter <georg@php.net>
Sun, 21 Jul 2002 22:19:51 +0000 (22:19 +0000)
committerGeorg Richter <georg@php.net>
Sun, 21 Jul 2002 22:19:51 +0000 (22:19 +0000)
ext/mysql/php_mysql.c

index eb3a96ebdd1f10e5b0b702797f5bf75cc07fac9c..039c87f9c99b73649e87b2735a7ec453d516668b 100644 (file)
@@ -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));
        }