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