nobbie Tue Oct 7 05:36:39 2003 EDT Modified files: (Branch: PHP_4_3) /php-src/ext/informix ifx.ec Log: MFH: - Fixed bug #18534 (ifx_close() leaves open session) MFH: - (ifx_do_close) Added Index: php-src/ext/informix/ifx.ec diff -u php-src/ext/informix/ifx.ec:1.69.2.20 php-src/ext/informix/ifx.ec:1.69.2.21 --- php-src/ext/informix/ifx.ec:1.69.2.20 Thu Sep 11 19:51:12 2003 +++ php-src/ext/informix/ifx.ec Tue Oct 7 05:36:38 2003 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ifx.ec,v 1.69.2.20 2003/09/11 23:51:12 sniper Exp $ */ +/* $Id: ifx.ec,v 1.69.2.21 2003/10/07 09:36:38 nobbie Exp $ */ /* ------------------------------------------------------------------- * if you want a function reference : "grep '^\*\*' ifx.ec" will give @@ -278,36 +278,70 @@ return(ifx_err_msg); } -static void _close_ifx_link(zend_rsrc_list_entry *rsrc TSRMLS_DC) -{ +static void ifx_do_close(link) EXEC SQL BEGIN DECLARE SECTION; - char *link; + PARAMETER char *link; EXEC SQL END DECLARE SECTION; - - link=(char *)rsrc->ptr; +{ EXEC SQL SET CONNECTION :link; + if (ifx_check() >= 0) { - EXEC SQL close database; - EXEC SQL DISCONNECT CURRENT; + EXEC SQL DISCONNECT :link; + + /* check if were in a transaction */ + if (SQLCODE == -1800) { + EXEC SQL SET CONNECTION :link; + EXEC SQL ROLLBACK WORK; + if (ifx_check() == 0) { + /* DISCONNECT again, after rollback */ + EXEC SQL DISCONNECT :link; + if (ifx_check() < 0) { + IFXG(sv_sqlcode) = SQLCODE; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Disconnect link %s after Automatic Rollback fails (%s)", link, ifx_error(link)); + } + } + if (ifx_check() < 0) { + /* CLOSE database if rollback or disconnect fails */ + EXEC SQL CLOSE DATABASE; + if (ifx_check() < 0) { + IFXG(sv_sqlcode) = SQLCODE; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Close database fails %s (%s)", link, ifx_error(link)); + } + } + } + else if (SQLCODE < 0) { + IFXG(sv_sqlcode) = SQLCODE; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Disconnect link %s fails (%s)", link, ifx_error(link)); + } + } + else { + IFXG(sv_sqlcode) = SQLCODE; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails (%s)", link, ifx_error(link)); } + +} + +static void _close_ifx_link(zend_rsrc_list_entry *rsrc TSRMLS_DC) +{ + char *link; + + link=(char *)rsrc->ptr; + + ifx_do_close(link); + efree(link); IFXG(num_links)--; } static void _close_ifx_plink(zend_rsrc_list_entry *rsrc TSRMLS_DC) { -EXEC SQL BEGIN DECLARE SECTION; char *link; -EXEC SQL END DECLARE SECTION; link = (char *)rsrc->ptr; - EXEC SQL SET CONNECTION :link; - if (ifx_check() >= 0) { - EXEC SQL close database; - EXEC SQL DISCONNECT CURRENT; - } + ifx_do_close(link); + free(link); IFXG(num_persistent)--; IFXG(num_links)--;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php